在Woocommerce 3

时间:2018-06-16 18:21:51

标签: php wordpress woocommerce cart custom-taxonomy

如果这是一个愚蠢的问题,请提前原谅我。

所以,我目前正在检查WooCommerce购物车中的所有商品。

如果购物车中的商品属于'练习'并且购物车中没有带有类别' Qualifying'的商品,我想显示消息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 ) ) {

 }
 ?>

我有两个产品,每个产品分别有一个类别,一个产品有&#39;实践&#39;类别和一个有资格&#39;类别。

当我将这两个产品添加到购物车并尝试使用此代码时,我会不断收到消息1,即使我说它是否(!)没有符合条件&#39;资格&# 39;

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

<强>更新

您的代码中存在一些错误和错误(例如,代码$product->id现在需要$product->get_id()$cart_items['data']->get_id(),因为Woocommerce 3)

对购物车商品使用has_term()时,请始终使用$cart_item['product_id']作为产品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>';
?>  

它应该更好地按预期工作。