WooCommerce单产品页检测当前产品是否为Featured产品的条件判断方法
WooCommerce单个产品页判断特色产品的正确实现
原有写法失效核心原因是WooCommerce特色产品的存储逻辑和传入参数不匹配:从WooCommerce 3.0版本开始,特色产品标记不属于名为featured的自定义分类法,之前传入的term参数也不符合实际存储规则。
推荐写法(兼容性最高,适配所有WooCommerce 3.0+版本)
直接调用WooCommerce产品对象自带的is_featured()方法,不需要关心底层存储逻辑,官方方法会随版本迭代保持兼容:
global $product; // 兜底获取产品对象,避免主循环异常时拿不到数据 if ( ! is_a( $product, 'WC_Product' ) ) { $product = wc_get_product( get_the_ID() ); } if ( $product->is_featured() ) { // 此处写当前产品是特色产品时需要执行的业务逻辑 }
如果你坚持用has_term()实现
注意分类法名称不是featured,而是WooCommerce内置的product_visibility,对应的term slug为featured,必须显式传入当前产品的ID避免判断错位:
if ( has_term( 'featured', 'product_visibility', get_the_ID() ) ) { // 特色产品业务逻辑 }
原有写法的错误点
- 第一种
has_term( 1, 'featured' ):首先系统不存在名为featured的产品分类法,其次product_visibility下的featured项ID不是固定为1,不同站点ID存在差异,传固定ID必然判断不准 - 第二种
has_term( TRUE, 'featured' ):分类法参数错误,且has_term()第一个参数不接受布尔值TRUE作为合法term参数,完全不符合函数调用规则
内容的提问来源于stack exchange,提问作者Callum
相关产品推荐
相关产品推荐

