WooCommerce分类与子分类价格调整求助:适配现有代码至子分类
解决WooCommerce产品子分类价格调整问题
嘿,我明白你现在的需求——这段代码能给指定分类的产品加价,但子分类里的产品没生效对吧?别担心,咱们改一下就行。
问题根源
原代码里的has_term()函数默认只检查产品直接归属的分类,不会自动包含子分类。所以要让它覆盖子分类,只需要调整这个函数的参数就行。
修改后的代码
// 简单产品、分组产品和外部产品 add_filter('woocommerce_product_get_price', 'conditional_custom_price', 99, 2 ); add_filter('woocommerce_product_get_regular_price', 'conditional_custom_price', 99, 2 ); // 可变产品 add_filter('woocommerce_product_variation_get_regular_price', 'conditional_custom_price', 99, 2 ); add_filter('woocommerce_product_variation_get_price', 'conditional_custom_price', 99, 2 ); function conditional_custom_price( $price, $product ) { global $post; // 关键修改:添加第四个参数true,让has_term包含子分类 if( has_term( 'test', 'product_cat', $post->ID, true )){ // 删除产品缓存价格(如有需要可取消注释) // wc_delete_product_transients($product->get_id()); $price = $price * 2.1; } return $price; }
关键说明
- 我给
has_term()添加了第四个参数true,这个参数控制是否检查子分类,设置为true后,只要产品属于test分类或者它的任何子分类,就会触发价格调整。 - 如果你的子分类层级比较深,这个方法依然有效,因为它会递归检查所有父分类关系。
- 要是你需要同时针对多个分类生效,把第一个参数改成数组就行,比如
has_term( array('test', 'another-category'), 'product_cat', $post->ID, true )
这样修改后,子分类里的产品也会自动应用2.1倍的价格调整啦!
内容的提问来源于stack exchange,提问作者Erik Duits
相关产品推荐
相关产品推荐

