WooCommerce特定属性值变体隐藏加入购物车按钮问题排查
WooCommerce 变体加入购物车按钮条件禁用修复
原代码的问题在于变量名冲突,导致所有变体的加入购物车按钮都被错误禁用。具体来说,循环里的$term_slug变量覆盖了外部定义的目标slug值yes,使得判断条件永远为真,所有变体都被标记为不可购买。
修正后的代码
add_filter( 'woocommerce_variation_is_purchasable', 'conditional_variation_is_purchasable', 20, 2 ); function conditional_variation_is_purchasable( $purchasable, $product ) { // 配置项 $target_taxonomy = 'pa_badge-print'; $target_slug = 'yes'; // 获取当前变体的属性数据 $variation_attributes = $product->get_variation_attributes(); // 检查当前变体是否包含目标属性 foreach ( $variation_attributes as $attr_key => $current_slug ) { // 提取属性分类名 $taxonomy = str_replace('attribute_', '', $attr_key); // 只针对目标分类进行判断 if ( $taxonomy === $target_taxonomy && $current_slug === $target_slug ) { $purchasable = false; // 禁用加入购物车按钮 break; } } return $purchasable; }
关键修改点
- 重命名循环变量为
$current_slug,避免覆盖外部的目标slug值 - 增加分类匹配判断,只检查
pa_badge-print属性,提升代码效率 - 直接对比属性slug,无需额外获取term对象,简化逻辑
将上述代码添加到你的主题functions.php文件或自定义插件中即可生效:当选择pa_badge-print属性下slug为yes的变体时,加入购物车按钮会被禁用;选择其他属性值时,按钮正常显示。
内容的提问来源于stack exchange,提问作者Lee John Thomson
相关产品推荐
相关产品推荐

