Расширить функционал шорткода WooCommerce

У WooCommerce есть готовые шорткоды. При использовании данного шорткода [products limit="6" columns="3"] выводится миниатюра, заголовок, цена и кнопка "В корзину".

Подскажите, как можно добавить атрибут, например: content="true", чтобы шорткод выводил краткое описание товара?

В итоге получаем [products limit="6" columns="3" content="true"]

WooCommerce Shortcodes


Ответы (1 шт):

Автор решения: Valerii Vasiliev

Непосредственно в шорткоде нет опций по выводу контента. Шорткод в данном случае просто запрос на вывод товаров по определенным условиям.

Подробная документация по шорткоду [products] https://docs.woocommerce.com/document/woocommerce-shortcodes/

Для управления выводом используйте хуки страницы магазина-архива-категории

https://www.businessbloomer.com/woocommerce-visual-hook-guide-archiveshopcat-page/

Например, для вывода описания под заголовком можно переопределить хук вывода заголовка

remove_action( 'woocommerce_shop_loop_item_title','woocommerce_template_loop_product_title', 10 );

function custom_woocommerce_template_loop_product_title() {
    
     global $product;
    ?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <div itemprop="description">
        <?php echo apply_filters( 'woocommerce_short_description', $product->post->post_excerpt ) ?>
    </div>
    <?php
}

add_action( 'woocommerce_shop_loop_item_title', 'custom_woocommerce_template_loop_product_title', 10);

Пример для эффекта только на шорткод

<?php remove_action( 'woocommerce_shop_loop_item_title','woocommerce_template_loop_product_title', 10 ); ?>

<?php add_action( 'woocommerce_shop_loop_item_title', 'custom_woocommerce_template_loop_product_title', 10); ?>

<?php do_shortcode('[products limit="6" columns="3"]'); ?>

<?php remove_action( 'woocommerce_shop_loop_item_title', 'custom_woocommerce_template_loop_product_title', 10); ?>

<?php add_action( 'woocommerce_shop_loop_item_title','woocommerce_template_loop_product_title', 10 ); ?>

<?php

function custom_woocommerce_template_loop_product_title() {
    
     global $product;
    ?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <div itemprop="description">
        <?php echo apply_filters( 'woocommerce_short_description', $product->post->post_excerpt ) ?>
    </div>
    <?php
}

?>
→ Ссылка