Вернитесь к категории продукта на странице продукта Woocommerce

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

Я пробовал использовать этот код, но он не работает ...

         $cats=get_the_category();
         foreach($cats as $cat){

             if($cat->category_parent == 0 && $cat->term_id != 1){
                 echo '<h2 class="link"><a href="'.get_category_link($cat->term_id ).'">Return</a></h2>';
             }
             break;
         }

Первая проблема, с которой я столкнулся с этим кодом, заключается в том, что у меня нет возможности установить родительскую категорию для продукта. (Если вы можете помочь мне, как это установить, это будет здорово).

Кроме того, даже если я удалю это условие If, я не получу никакой ссылки.

Спасибо!


person Galili Omri    schedule 13.02.2018    source источник
comment
Код выглядит нормально, можете ли вы попробовать переместить break внутри условия IF, чуть ниже оператора echo ... как будто ваш цикл прерывается после первой итерации, даже если категория еще не выведена ...   -  person Mohsin    schedule 13.02.2018


Ответы (2)


Функция get_the_category() предназначена для категорий WordPress, но не для категорий продуктов WooCommerce, которые являются настраиваемой таксономией. То же самое для get_category_link()

Поэтому вам следует вместо этого использовать wp_get_post_terms() с дополнительным необязательным аргументом, который будет позволяют получать только родительские категории товаров. Вместо ссылки вы будете использовать get_term_link():

// Get parent product categories on single product pages
$terms = wp_get_post_terms( get_the_id(), 'product_cat', array( 'include_children' => false ) );

// Get the first main product category (not a child one)
$term = reset($terms);
$term_link =  get_term_link( $term->term_id, 'product_cat' ); // The link
echo '<h2 class="link"><a href="'.$term_link.'">Return</a></h2>';

Код находится в файле function.php вашей активной дочерней темы (активной темы).

Проверено и работает.

person LoicTheAztec    schedule 13.02.2018

Похоже, ваш оператор break прерывает цикл, даже если ни одно условие не выполняется, поэтому foreach завершается еще до того, как мы найдем совпадение. Попробуйте переместить разрыв; в блок условия if, как показано ниже:

     $cats = get_the_category();

     foreach($cats as $cat){

         if($cat->category_parent == 0 && $cat->term_id != 1){
             echo '<h2 class="link"><a href="'.get_category_link($cat->term_id ).'">Return</a></h2>';
             break; // this will stop the loop as soon as we have a match.
         }

     }
person Mohsin    schedule 13.02.2018