当前位置: 首页 > 知识库问答 >
问题:

在WooCommerce 3中使用条件has_term()函数

阎修杰
2023-03-14

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

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

如果购物车中有一个产品属于“Practice”类别,而购物车中没有“Qualification”类别的产品,我想显示消息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,即使我说如果它没有(!)术语“合格”。

我做错了什么?

共有1个答案

邓昊天
2023-03-14

更新

在你的代码中有一些错误和错误(例如在你的代码$product-

对购物车项目使用has_term()时,始终对产品id参数使用$cart_item['product_id'],但决不使用$cart_item['data']-

我重访了您的代码。尝试以下方法:

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

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

 类似资料:
  • 我目前在R中有一个数据框,看起来像这样 我用group_by将数据按动物分组。我想创建一个新的列V6,它采用列V4,将较低的值除以较高的值,如果该值小于0.5,则V6= A,ifelse则V6 = b..有没有办法在R中使用带条件语句的mutate函数?实际的数据框要大得多,所以我宁愿不用手动操作。这是我希望最终数据框的样子 这就是我开始做的 但我知道这是不对的。非常感谢。

  • 我有一个接受NSE参数的函数。 假设我有一个tibble,其中有一列需要订购。我想创建一个函数,它可以根据函数参数中输入的名称对列名进行排序。但是,如果我不使用参数,我希望它不对列进行排序,因此我使用< code>column_name = NULL作为默认参数(或< code>column_name = NA) 创建于 2022-04-11 由 reprex 软件包 (v2.0.1) 然而,尽管

  • 问题内容: 如何将sql查询写入hibernate条件? 问题答案: 想我找到了答案。您必须使用Projection.sqlProjection()而不是Projections.sum()。例:

  • 我目前正在使用kotlin quarkus和mutiny构建一个反应式应用程序,作为反应式编程的新手,我想知道处理以下工作流的最佳方式是什么: 尝试在数据库中查找项目(dynamodb) 如果存在,则向调用者返回一个指示此的值 如果不存在,请调用保存服务 致电外部服务获取一些数据 使用来自外部服务的数据更新数据库中的项目 返回一个值,指示已创建对象 以下是我目前的代码: 此方法最终将由resten

  • 问题内容: 如何将sql查询写入休眠条件? 问题答案: 认为我找到了答案。您必须使用Projection.sqlProjection()而不是Projections.sum()。例:

  • 我在组件的列表中显示了一个项目数组。项目的属性之一是描述字段,其范围可以从一个单词到几个句子。 当描述太长,我想截断它,并显示一个按钮,将显示点击时的完整文本。是否截断和显示按钮的条件基于返回布尔值的函数: 然后我从组件的模板端使用这个函数,如下所示(ngFor的一小部分): 这里使用的CSS很简单: 目前,该行为非常偶然,我在控制台中收到错误: expressionchangedafterith