Мне нужно сделать распродажи бейджей для 3 разных категорий товаров — продажа, скидка & Склад.
Я просто захожу в папку «woocommerce» в моей теме, открываю sale-flash.php
файл (тот же код, что и по умолчанию woocommerce sale-flash.php
шаблон, но с некоторыми дополнениями от меня и другого парня.)
Таким образом, проблема заключается в том, что значок отображается при просмотре страницы категории продукта, но не отображается на главной странице.
<!-- MORE BADGES -->
<?php
if ( has_term ('sale') || is_product_category('sale') || is_product_tag('sale_tag') ):
echo apply_filters(
'woocommerce_sale_flash',
'<div class="sale_tag">
<div class="ribbon" style="width: 40px;!important height: 90px;!important padding-top: 30px !important;height: 135px;padding-top: 80px;">
<strong class="ribbon-content">
<span>' .__( 'Sale', 'woocommerce' ) . '</span>
</strong>
</div>
</div>', $post, $product
);
elseif ( is_product_category('stock') ):
?>
<?php echo apply_filters(
'woocommerce_sale_flash',
'<div class="sale_tag">
<div class="ribbon" style="width: 40px;!important height: 90px;!important padding-top: 40px !important">
<strong class="ribbon-content">
<span>' .__( 'Stock', 'woocommerce' ) . '</span>
</strong>
</div>
</div>', $post, $product
);
elseif ( is_product_category('discount') ):
echo apply_filters(
'woocommerce_sale_flash',
'<div class="sale_tag">
<div class="ribbon" style="width: 40px;!important height: 90px;!important padding-top: 40px !important">
<strong class="ribbon-content">
<span>' .__( 'Discount', 'woocommerce' ) . '</span>
</strong>
</div>
</div>', $post, $product
); ?>
Этот код я нашел в «content-product.php»
<?php
/**
* woocommerce_before_shop_loop_item_title hook
*
* @hooked woocommerce_show_product_loop_sale_flash - 10
* @hooked woocommerce_template_loop_product_thumbnail - 10
*/
do_action( 'woocommerce_before_shop_loop_item_title' );
?>
Или я должен сделать что-то вроде этого:
$cats = wp_get_post_terms( $post->ID, "product_cat" );
foreach ( $cats as $cat ) {
$cats_array[] .= $cat->term_id;
}
$tags = wp_get_post_terms( $post->ID, "product_tag" );
foreach ( $tags as $tag ) {
$tags_array[] .= $tag->term_id;
}
Чтобы отобразить ленту для продукта с пользовательской категорией?
Вы путаете если еще синтаксис.
Используйте либо альтернативный синтаксис, используя :
:
<?php
if ( is_product_category('sale') || is_product_tag('sale_tag') ):
// Echo content here
elseif ( is_product_category('stock') ):
// Echo content here
endif;
?>
Или используйте обычный синтаксис, используя {}
:
<?php
if ( is_product_category('sale') || is_product_tag('sale_tag') ){
// Echo content here
} elseif ( is_product_category('stock') ){
// Echo content here
}
?>
Не используйте оба синтаксиса одновременно.
По умолчанию sale-flash.php
включается через woocommerce_show_product_loop_sale_flash()
функция, которая подключена к двум действиям: woocommerce_before_shop_loop_item_title
выполняется до цикла продукта, используемого на страницах архива продукта и категорий. Другое действие woocommerce_before_single_product_summary
который работает на одной странице продукта. Если ваша домашняя страница не отображается, это предполагает одно из следующих действий:
remove_action()
Я бы порекомендовал проверить ваш продукт, чтобы увидеть, если он использует wc_get_template_part( 'content', 'product' )
,
Других решений пока нет …