在 Woocommerce 3 中对购物车项目使用条件 has_term() 函数
Using Conditional has_term() function for cart items in Woocommerce 3
如果这是一个愚蠢的问题,请提前原谅我。
所以,我目前正在检查 WooCommerce 购物车中的所有商品。
如果购物车中有商品属于类别 'Practice' 并且购物车中没有属于类别 'Qualifying' 的产品,我想显示消息 1
如果 'Practice' 和 'Qualifying' 类别都在购物车中,我想显示消息 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 ) ) {
}
?>
我有两种产品各有一个类别,一个有 'Practice' 个类别,一个有 'Qualifying' 个类别。
当我将这两个产品添加到购物车并尝试此代码时,我不断收到消息 1,即使我说它没有 (!) 术语 'qualifying'。
我做错了什么?
已更新
您的代码中存在一些错误和错误 (例如,在您的代码中 $product->id
现在需要 $product->get_id()
或 $cart_items['data']->get_id()
,因为 Woocommerce 3)。
当对购物车商品使用 has_term()
时,请始终对产品 ID 参数使用 $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>';
?>
它应该能更好地按预期工作。
如果这是一个愚蠢的问题,请提前原谅我。
所以,我目前正在检查 WooCommerce 购物车中的所有商品。
如果购物车中有商品属于类别 'Practice' 并且购物车中没有属于类别 'Qualifying' 的产品,我想显示消息 1
如果 'Practice' 和 'Qualifying' 类别都在购物车中,我想显示消息 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 ) ) {
}
?>
我有两种产品各有一个类别,一个有 'Practice' 个类别,一个有 'Qualifying' 个类别。
当我将这两个产品添加到购物车并尝试此代码时,我不断收到消息 1,即使我说它没有 (!) 术语 'qualifying'。
我做错了什么?
已更新
您的代码中存在一些错误和错误 (例如,在您的代码中 $product->id
现在需要 $product->get_id()
或 $cart_items['data']->get_id()
,因为 Woocommerce 3)。
当对购物车商品使用 has_term()
时,请始终对产品 ID 参数使用 $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>';
?>
它应该能更好地按预期工作。