WooCommerce+All Products插件:如何仅禁用Echantillon变体订阅功能?
解决WooCommerce + All Products for Woo Subscriptions禁用指定变体订阅功能的问题
原代码无效的核心原因是使用的钩子woocommerce_subscription_variation_is_purchasable并非All Products for Woo Subscriptions插件的专属控制钩子,无法覆盖插件的订阅逻辑。以下是针对你的需求的有效解决方案:
有效代码实现
add_filter('wcsap_is_subscription_eligible', 'disable_echantillon_variation_subscription', 20, 2); function disable_echantillon_variation_subscription($eligible, $product) { // 仅针对可变产品的变体生效 if ($product->is_type('variation')) { // 获取当前变体的Conditionnement属性值(slug) $conditionnement = $product->get_attribute('pa_conditionnement'); // 判断是否为Echantillon变体,是则禁用订阅资格 if ($conditionnement === 'echantillon') { $eligible = false; } } return $eligible; }
代码说明
- 使用
wcsap_is_subscription_eligible钩子:这是All Products for Woo Subscriptions插件提供的官方钩子,专门用于控制产品/变体是否允许开启订阅。 - 直接读取变体属性:无需通过父产品匹配变体ID,直接获取当前变体的
pa_conditionnement属性值,逻辑更简洁可靠。 - 优先级设为20:确保该函数的执行顺序晚于插件默认逻辑,覆盖原有设置。
使用方法
将上述代码添加到你的WordPress主题的functions.php文件中,或通过Code Snippets插件添加并激活即可。
注意:请确认属性slug
pa_conditionnement与你后台设置的属性slug一致,若属性slug不同,需同步修改代码中的对应字段。
内容的提问来源于stack exchange,提问作者Florian
相关产品推荐
相关产品推荐

