Как с помощью шорткода вывести товар woocommerce?

Ссылка скопирована
PHP
1 ответ

Добрый день! Есть шотркод woocommerce для вывода товара
[product_page id="94"]
Вопрос можно ли тут задать параметры чтобы выводились только фото товара, описание и кнопка?

Как с помощью шорткода вывести товар woocommerce?

Или нужно отдельный шаблон товара делать, либо в шаблоне по условию, если это страница товара то показываем все. Если не страница товара показываем только то, что в зеленом прямоугольнике

Дополнительно

Ответы:

Попробуйте не вырезая код просто отключить отображение display:none; V0VA @V0VA На сегодняшний день, такой возможности нет.

Можно решить вопрос правкой шаблона content-single-product.php
(предварительно скопировав его в /папка шаблона / woocommerce/ )
добавив условие на проверку url если нужная страница, то не нужные блоки не отображаются

<?php  	$url = $_SERVER['REQUEST_URI']; 	$url = explode('?', $url); 	$url = $url[0]; 	if($url !== "/"){...} // условие показа/скрытия ?>

<?php $url = $_SERVER['REQUEST_URI']; $url = explode('?', $url); $url = $url[0]; if($url !== "/"){...} // условие показа/скрытия ?>

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Мария Код Ответ

У шорткода WooCommerce product_page нет параметров, которые позволяют штатно оставить только фото, описание и кнопку. Этот шорткод выводит почти тот же шаблон, что и одиночная страница товара, поэтому он подтягивает галерею, цену, вкладки, мета-блоки, связанные товары и другие элементы через хуки WooCommerce. Скрывать лишнее через display:none можно только как временный визуальный костыль: разметка все равно загрузится, часть скриптов останется, а при обновлении темы или WooCommerce легко получить побочные эффекты.

Более безопасный путь - сделать отдельный короткий shortcode под нужный компактный вывод. Тогда обычная карточка товара и одиночная страница товара останутся без изменений, а на нужной странице вы получите только заданные блоки.

add_shortcode('compact_product', function ($atts) {
    if (! function_exists('wc_get_product')) {
        return '';
    }
 
    $atts = shortcode_atts([
        'id' => 0,
    ], $atts, 'compact_product');
 
    $product_id = absint($atts['id']);
    $product = wc_get_product($product_id);
 
    if (! $product || ! $product->is_visible()) {
        return '';
    }
 
    $description = $product->get_short_description();
 
    if ($description === '') {
        $description = $product->get_description();
    }
 
    $html  = '<div class="compact-product">';
    $html .= '<a class="compact-product__image" href="' . esc_url(get_permalink($product_id)) . '">';
    $html .= $product->get_image('woocommerce_single');
    $html .= '</a>';
    $html .= '<div class="compact-product__description">' . wpautop(wp_kses_post($description)) . '</div>';
    $html .= '<a class="button compact-product__button" href="' . esc_url($product->add_to_cart_url()) . '">' . esc_html($product->add_to_cart_text()) . '</a>';
    $html .= '</div>';
 
    return $html;
});

add_shortcode('compact_product', function ($atts) { if (! function_exists('wc_get_product')) { return ''; } $atts = shortcode_atts([ 'id' => 0, ], $atts, 'compact_product'); $product_id = absint($atts['id']); $product = wc_get_product($product_id); if (! $product || ! $product->is_visible()) { return ''; } $description = $product->get_short_description(); if ($description === '') { $description = $product->get_description(); } $html = '<div class="compact-product">'; $html .= '<a class="compact-product__image" href="' . esc_url(get_permalink($product_id)) . '">'; $html .= $product->get_image('woocommerce_single'); $html .= '</a>'; $html .= '<div class="compact-product__description">' . wpautop(wp_kses_post($description)) . '</div>'; $html .= '<a class="button compact-product__button" href="' . esc_url($product->add_to_cart_url()) . '">' . esc_html($product->add_to_cart_text()) . '</a>'; $html .= '</div>'; return $html; });

Использование на странице:

[compact_product id='94']

[compact_product id='94']

Такой вариант не требует править content-single-product.php и не ломает стандартный шаблон товара. Он получает товар по ID, проверяет, что товар существует и видим в каталоге, выводит изображение WooCommerce нужного размера, берет краткое описание, а если оно пустое - обычное описание. Кнопка строится через методы товара, поэтому для простого товара она будет вести на добавление в корзину, а для вариативного товара обычно приведет пользователя к выбору вариации.

  • Если нужно вывести именно цену, добавьте $product->get_price_html() в нужное место разметки.
  • Если кнопка должна работать через AJAX как в каталоге, нужно добавить стандартные классы WooCommerce и data-product_id, но для простой компактной вставки обычной ссылки часто достаточно.
  • Если такой блок используется во многих местах, лучше вынести код в небольшой плагин или mu-plugin, а не держать его в родительской теме.

Правка шаблона одиночного товара нужна только тогда, когда вы действительно меняете саму страницу товара. Для вывода одного товара внутри произвольной страницы отдельный shortcode обычно чище: меньше условий по URL, меньше зависимости от структуры темы и проще откатить изменение.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно