WooCommerce按品类控制产品标签显示的问题及报错修复咨询
WooCommerce产品标签条件化显示解决方案
原代码存在的问题
你之前的代码报错主要是这几个原因:
- 未定义
$product_id变量,无法获取当前产品信息 wp_get_post_terms的第二个参数应该是分类法(默认产品分类是product_cat),不是具体分类slug- 数组和对象访问语法错误:比如
$categories[synthetic-wigs]要加引号,$term-synthetic-wigs应该用->访问对象属性 - 逻辑判断有误,没有正确收集产品分类的slug
正确实现代码
我们可以把移除通用标签和条件化移除标签的逻辑合并到一个函数里,避免多个过滤器的优先级冲突:
add_filter( 'woocommerce_product_tabs', 'customize_product_tabs', 98 ); function customize_product_tabs( $tabs ) { // 1. 移除所有产品的「Additional Information」标签 unset( $tabs['additional_information'] ); // 2. 获取当前产品对象 global $product; if ( ! $product ) return $tabs; // 3. 指定需要移除「Sizing」标签的分类slug $target_category = 'synthetic-wigs'; // 4. 检查当前产品是否属于目标分类 if ( has_term( $target_category, 'product_cat', $product->get_id() ) ) { // 在目标分类下移除「Sizing」标签 unset( $tabs['sizing'] ); } return $tabs; }
代码说明
- 全局调用
$product获取当前产品对象,确保能正确拿到产品ID - 使用
has_term()函数直接判断产品是否属于指定分类,比手动获取分类更简洁可靠 - 先统一移除所有产品的「Additional Information」标签,再根据分类条件决定是否移除「Sizing」标签
- 保持过滤器优先级为98,确保能覆盖默认的产品标签设置
扩展说明
如果需要针对多个分类移除「Sizing」标签,可以把$target_category改成数组,示例如下:
$target_category = ['synthetic-wigs', 'another-category'];
has_term()函数会自动处理数组形式的分类判断。
内容的提问来源于stack exchange,提问作者Spacejams
相关产品推荐
相关产品推荐

