Как проверить, находится ли продукт в определенной категории на single-product.php в Woocommerce?
-
-
Может быть,потому что в вашем первом утверждении отсутствует закрывающий `)`?Это должно быть `if (is_product_category ('audio'))`Might be because your first statement is missing a closing `)`? It should be `if (is_product_category('audio'))`
- 0
- 2012-12-12
- stealthyninja
-
Хороший улов,но это еще не все.is_product_category,похоже,не работает на single-product.phpGood catch, but that's not it. is_product_category doesn't seem to work on single-product.php
- 0
- 2012-12-12
- Alex
-
5 ответ
- голосов
-
- 2012-12-18
Я не думаю,что
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'; }
Надеюсь,это то,что вы искали,и ответ на ваш вопрос.
I don't think
get_categories()
is the best option for you in this case because it returns a string with all the categories listed as anchor tags, fine for displaying, but not great for figuring out in code what the categories are. Ok, so the first thing you need to do is grab the product/post object for the current page if you don't already have it:global $post;
Then you can get the product category term objects (the categories) for the product. Here I'm turning the category term objects into a simple array named
$categories
so it's easier to see what slugs are assigned. Note that this will return all categories assigned to the product, not just the one of the current page, ie if we're on/shop/audio/funzo/
:$terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug;
Then we just have to check whether a category is in the list:
if ( in_array( 'audio', $categories ) ) { // do something
Putting it all together:
<?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'; }
Hopefully this is what you were looking for and answers your question.
-
- 2012-12-18
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'; }
has_term
should work in this case: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'; }
-
Супер простой и эффективный способ сделать это.Я думаю,это лучший ответ.Super simple and effective way to do this. I think this is better answer.
- 0
- 2017-05-25
- Trevor
-
Я предпочел это,потому что оно было коротким.Однако я сделал `if {thing;return;} `I preferred this because it was short. However I did `if { thing; return;}`
- 0
- 2018-01-31
- Eoin
-
- 2015-02-18
Стоит отметить,что вы можете просмотреть список параметров,вызвав массив,вместо того,чтобы загромождать свой код множеством проверокelseif,предполагая,что вы хотите сделать то же самое с каждой имеющейся категорией.
if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) : // Do stuff here else : // Do some other stuff endif;
It's worth noting that you can go through a list of options by calling an array rather than having to clutter up your code with lots of elseif checks, assuming you want to do the same thing with each category that is.
if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) : // Do stuff here else : // Do some other stuff endif;
-
Я думаю,что этот ответ следует добавить в качестве редактирования к ответу Майло.I think this answer should be added, as edittion, to Milo's answer.
- 0
- 2015-02-18
- cybmeta
-
- 2016-06-09
Это старый вариант,но на всякий случай люди все еще ищут 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/
This is old but just in case people are still looking WooThemes as a simple solution:
if ( is_product() && has_term( 'your_category', 'product_cat' ) ) { //do code }
*Change 'your_category' to whatever you are using.
Here is the link to the documentation: https://docs.woothemes.com/document/remov-product-content-based-on-category/
-
- 2012-12-12
Я бы посмотрел на использование функции
get_categories()
класса WC_Product.Вы можете найти ссылку на документацию здесь .
Обычно в цикле страницы вызывается функция,возвращающая категории,связанные с продуктом.
I'd look at using the
get_categories()
function of the WC_Product class.You can find the link to the documentation here.
Basically within the loop of the page call the function to return the categories associated with the product.
-
Я не могу это закодировать.Я понятия не имею,как заставить это работать.Кто-нибудь,пожалуйста,проиллюстрируйте это.Я старался изо всех сил там.Должен ли я заменить это наget_categories ()?I am not able to code this. I don't have a clue how to get this to work. Somebody please illustrate this. I tried my best up there. Should I replace this with get_categories()?
- 0
- 2012-12-13
- Alex
-
@Alex функцияis_product_category () возвращает ИСТИНА,если вы находитесь на странице категории продукта.Не категория товара.Я сейчас занимаюсь проектом,но попробую достать вам фрагмент кода позже.@Alex the is_product_category() function returns TRUE if you're on the product category page. Not the category of the product. I'm heads down on a project right now, but I'll try to get you a code snippet later.
- 0
- 2012-12-13
- Steve
-
Спасибо,Стивен,что нашел время написать этот небольшой фрагмент кода.Я очень ценю это.Thanks, Steven for taking time to code this little snippet. Appreciate it very much.
- 0
- 2012-12-13
- Alex
Как я могу проверить,относится ли продукт к определенной категории продуктов на single-product.php ?
is_product_category ('slug') не влияет на single-product.php .Я хочу иметь верхние условные обозначения.Есть ли решение для этого на странице одного продукта?