Как проверить, находится ли продукт в определенной категории на одном product.php в Woocommerce?

25

Как в мире я могу проверить, находится ли продукт в определенной товарной категории на single-product.php ?

<?php if (is_product_category('audio')) {
           echo 'In audio';
               woocommerce_get_template_part( 'content', 'single-product' );

      } elseif (is_product_category('elektro')) {

            echo 'In elektro';
            woocommerce_get_template_part( 'content', 'single-product' );
         } else {
            echo 'some blabla'; }  ?>

is_product_category ('slug') не влияет на одиночный product.php . Я хочу иметь верхние условия. Любое решение для этого на странице одного продукта?

Alex
источник
Может быть потому, что в вашем первом заявлении отсутствует закрытие )? Так и должно бытьif (is_product_category('audio'))
stealthyninja
Хороший улов, но это не так. Кажется, что is_product_category не работает с одиночным product.php
Алекс

Ответы:

28

Я не думаю, что get_categories()это лучший вариант для вас в этом случае, потому что он возвращает строку со всеми категориями, перечисленными в качестве тегов привязки, отлично подходит для отображения, но не очень хорошо для определения в коде, что такое категории. Итак, первое, что вам нужно сделать, это взять объект product / post для текущей страницы, если у вас его еще нет:

global $post;

Затем вы можете получить термины объекты категории товаров (категории) для товара. Здесь я превращаю термин «объекты категории» в простой именованный массив, $categoriesчтобы было легче увидеть, какие слагы назначены. Обратите внимание, что это вернет все категории, назначенные продукту, а не только одну из текущей страницы, т.е. если мы находимся /shop/audio/funzo/:

$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

Тогда мы просто должны проверить, есть ли категория в списке:

if ( in_array( 'audio', $categories ) ) {  // do something

Собираем все вместе:

<?php
global $post;
$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

if ( in_array( 'audio', $categories ) ) {
  echo 'In audio';
  woocommerce_get_template_part( 'content', 'single-product' );
} elseif ( in_array( 'elektro', $categories ) ) {
  echo 'In elektro';
  woocommerce_get_template_part( 'content', 'single-product' );
} else {
  echo 'some blabla';
}

Надеюсь, это то, что вы искали и отвечает на ваш вопрос.

Джастин Стерн
источник
37

has_term должно работать в этом случае:

if ( has_term( 'audio', 'product_cat' ) ) {

       echo 'In audio';
       woocommerce_get_template_part( 'content', 'single-product' );

} elseif ( has_term( 'elektro', 'product_cat' ) ) {

       echo 'In elektro';
       woocommerce_get_template_part( 'content', 'single-product' );

} else {
       echo 'some blabla';
}
Milo
источник
Супер простой и эффективный способ сделать это. Я думаю, что это лучший ответ.
Тревор
Я предпочел это, потому что это было коротко. Однако я сделалif { thing; return;}
Eoin
8

Стоит отметить, что вы можете просматривать список опций, вызывая массив, вместо того, чтобы загромождать свой код множеством проверок elseif, предполагая, что вы хотите сделать то же самое с каждой категорией.

if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) :

// Do stuff here

else :

// Do some other stuff

endif;
Koshensky
источник
Я думаю, что этот ответ должен быть добавлен, как редактирование, к ответу Майло.
cybmeta
4

Это старый, но на тот случай, если люди все еще считают WooThemes простым решением:

if ( is_product() && has_term( 'your_category', 'product_cat' ) ) {
    //do code
}

* Измените your_category на то, что вы используете.

Вот ссылка на документацию: https://docs.woothemes.com/document/remov-product-content-based-on-category/

tiaNaturally
источник
0

Я бы посмотрел на использование get_categories()функции класса WC_Product.

Вы можете найти ссылку на документацию здесь .

По сути, внутри цикла страницы вызывается функция, возвращающая категории, связанные с продуктом.

Стив
источник
Я не могу закодировать это. Я понятия не имею, как заставить это работать. Кто-нибудь, пожалуйста, проиллюстрируйте это. Я старался изо всех сил там. Должен ли я заменить это с get_categories ()?
Алекс
@ Алекс функция is_product_category () возвращает TRUE, если вы находитесь на странице категории продукта. Не категория продукта. Я сейчас занят проектом, но позже постараюсь получить фрагмент кода.
Стив
Спасибо, Стивен, за то, что уделил время написанию этого маленького фрагмента. Очень ценю это.
Алекс