Ценовая позиция магазина Woocommerce


Я использую тему витрины магазина с woocommerce и хочу создать пользовательский макет на странице магазина.

В этом пользовательском макете нет миниатюры продукта, название и цена должны быть внутри одного и того же div, чтобы я мог легко настроить его с помощью css.

Однако, когда я пытаюсь получить цену внутри тегов h2, она не дает ожидаемого результата. Он появляется, но над заголовком и за пределами пользовательского раздела. Что я делаю не так?

Смотрите изображение для ссылка image for reference

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

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

function custom_woocommerce_template_loop_product_title () {
    echo '
    <div class="custom-title-wrapper">
    <h1 class="woocommerce-loop-product__title custom-loop-product-title">' . get_the_title() . '</h1>
    <h2>' . woocommerce_template_loop_price() . '</h2>
    </div>'
    ;
}
Author: João Teixeira, 2019-04-17

1 answers

Он появляется, но над заголовком и за пределами пользовательского раздела. Что я делаю не так?

Это потому, что woocommerce_template_loop_price() повторяет вывод.

Поэтому, чтобы устранить проблему, просто используйте ?> HTML here <?php вместо echo 'HTML here';:

function custom_woocommerce_template_loop_product_title() {
    ?>
    <div class="custom-title-wrapper">
        <h1 class="woocommerce-loop-product__title custom-loop-product-title"><?php the_title(); ?></h1>
        <h2><?php woocommerce_template_loop_price(); ?></h2>
    </div>
    <?php
}

И (хотя это не большая проблема) вы должны использовать add_action(), а не add_filter(), потому что woocommerce_shop_loop_item_title - это действие, а не фильтр:

add_action( 'woocommerce_shop_loop_item_title', 'custom_woocommerce_template_loop_product_title', 10 );
 2
Author: user165319, 2019-04-18 02:53:54