Як перевірити, чи продукт належить до певної категорії на одній-продукт.php у Woocommerce?


25

Як у світі я можу перевірити, чи продукт належить до певної категорії товарів на одній-продукт.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') не впливає на single-product.php . Я хочу мати верхні умови. Будь-яке рішення для цього на сторінці з одним продуктом?


Можливо, тому що у вашій першій заяві відсутнє завершення )? Це має бутиif (is_product_category('audio'))
stealthyninja

Хороший улов, але це не все. is_product_category, здається, не працює на single-product.php
Алекс

Відповіді:


28

Я не думаю, що get_categories()це найкращий варіант для вас у цьому випадку, оскільки він повертає рядок із усіма категоріями, переліченими як прив’язні теги, прекрасні для відображення, але не чудові для з'ясування в коді, що таке категорії. Гаразд, тому перше, що вам потрібно зробити, - це захопити об'єкт продукт / пост для поточної сторінки, якщо у вас його ще немає:

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';
}

Супер простий і ефективний спосіб зробити це. Я думаю, що це краща відповідь.
Тревор

Я віддав перевагу цьому, тому що це було коротко. Однак я це зробив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;

Я думаю, що цю відповідь слід додати, як редагування, до відповіді Міло.
cybmeta

4

Це старе, але про всяк випадок, якщо люди все ще розглядають WooThemes як просте рішення:

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

* Змініть "свою_категорію" на те, що ви використовуєте.

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


0

Я хотів би переглянути get_categories()функцію класу WC_Product.

Ви можете знайти посилання на документацію тут .

В основному в циклі сторінки викликають функцію повернення категорій, пов'язаних з продуктом.


Я не в змозі це кодувати. У мене немає поняття, як змусити це працювати. Хтось прохання проілюструвати це. Я спробував усе можливе там. Чи слід замінити це на get_categories ()?
Олексій

@Alex функція is_product_category () повертає TRUE, якщо ви знаходитесь на сторінці категорії товарів. Не категорія товару. Я зараз головую над проектом, але спробую дістати вам фрагмент коду пізніше.
Стів

Дякую, Стівен, що знайшов час для кодування цього маленького фрагмента. Цінуй це дуже.
Олексій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.