Использование условной функции has_term () для товаров в корзине в Woocommerce 3

Пожалуйста, заранее простите меня, если это глупый вопрос.

Итак, в настоящее время я проверяю все товары в корзине WooCommerce.

Если в корзине есть продукт из категории «Практика», а в корзине нет продуктов с категорией «Соответствие требованиям», я хочу показать сообщение 1.

Если в корзине есть категории «Практика» и «Квалификация», я хочу показать сообщение 2.

Прямо сейчас вот мой код:

<?php 
   $category_checks = array();

   // check each cart item for our category

   foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

      $product = $cart_item['data'];
      $practice = false;
      $qualifying = false;

      if( has_term( 'practice', 'product_cat', $product->id ) && ! has_term( 'qualifying', 'product_cat', $product->id ) ) : ?>

         <?php $practice = true; ?>

         Upsell goes here (Message 1)

      <?php elseif( has_term( 'practice', 'product_cat', $product->id ) && has_term( 'qualifying', 'product_cat', $product->id ) ) : ?>

         <?php $qualifying = true; ?>

         No need to upsell (Message 2)

       <?php endif; ?>

<?php      

array_push( $category_checks, $practice, $qualifying );
 }

 if ( ! in_array( false, $category_checks, true ) ) {

 }
 ?>

У меня есть два продукта, каждый из которых имеет категорию «Практика», а другой - категорию «Квалификация».

Когда я добавляю эти два продукта в корзину и пробую использовать этот код, я постоянно получаю Сообщение 1, хотя я говорю, что в нем нет (!) Термина «соответствующий».

Что я здесь делаю не так?


person cannydare    schedule 16.06.2018    source источник


Ответы (1)


Обновлено

В вашем коде есть несколько ошибок и ошибок (например, в вашем коде $product->id должно быть теперь $product->get_id() или $cart_items['data']->get_id(), начиная с Woocommerce 3).

При использовании has_term() для элементов корзины всегда используйте $cart_item['product_id'] в качестве аргумента идентификатора продукта, но никогда $cart_item['data']->get_id(), поскольку он не будет работать с элементами корзины, которые являются вариациями продукта.
Варианты продуктов Woocommerce не обрабатывают никакую настраиваемую таксономию как категории продуктов или теги продуктов…

Я пересмотрел ваш код. Вместо этого попробуйте следующее:

<?php 
    $taxonomy   = 'product_cat';
    $practice   = false;
    $qualifying = false;

    // Loop through order items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        $product_id = $cart_item['product_id'];

        if( has_term( 'practice', $taxonomy, $product_id ) )
            $practice = true;
        if( has_term( 'qualifying', $taxonomy, $product_id ) )  
            $qualifying = true;
    }

    if ( $practice && ! $qualifying )
        echo '<p>Upsell goes here (Message 1)</p>';
    elseif ( $practice && $qualifying )
        echo '<p>No need to upsell (Message 2)</p>';
?>  

Лучше работать так, как задумано.

person LoicTheAztec    schedule 16.06.2018