You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过条件标签使变体价格代码仅作用于slug为training-level的产品属性?

实现代码仅作用于特定产品属性的解决方案

没问题!完全可以通过条件判断来让你的代码只作用于slug为training-level的产品属性,我来帮你梳理正确的实现方式——

首先,你之前的尝试没生效,大概率是因为条件判断的逻辑或者位置不对,比如没有正确获取当前属性的slug,或者判断时机太早导致对象未初始化。咱们直接针对目标属性做精准判断即可:

核心思路

在你原有代码的逻辑前,先检查当前处理的产品属性slug是否等于training-level,只有符合条件时才执行添加价格的代码。

完整代码示例(适配WooCommerce常见场景)

假设你的原代码是通过woocommerce_variation_option_name钩子来修改变体选项名称并添加价格,调整后的代码如下:

add_filter( 'woocommerce_variation_option_name', 'add_price_to_specific_variation_attribute', 10, 4 );
function add_price_to_specific_variation_attribute( $name, $option, $product, $attribute ) {
    global $wpdb;

    // 关键:判断当前属性的slug是否为training-level
    if ( $attribute->get_slug() === 'training-level' ) {
        // 👇 这里放你原来的添加价格的代码逻辑(示例仅供参考,替换成你自己的代码)
        $term_slug = $option->slug;
        // 获取对应变体ID
        $variation_id = $wpdb->get_var( $wpdb->prepare(
            "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_%s' AND meta_value = %s",
            $attribute->get_name(),
            $term_slug
        ) );

        if ( $variation_id ) {
            $variation_product = wc_get_product( $variation_id );
            $variation_price = wc_price( $variation_product->get_price() );
            // 给选项名称追加价格
            $name .= ' (' . $variation_price . ')';
        }
    }

    return $name;
}

关键细节说明

  1. 精准判断属性slug:通过$attribute->get_slug()直接获取当前处理的属性slug,和目标值training-level对比,确保只作用于指定属性
  2. 钩子参数利用:woocommerce_variation_option_name钩子本身就会传递$attribute对象,不需要额外全局调用,这比遍历所有属性更高效
  3. 对象初始化检查:如果你的代码是在其他钩子中执行,要确保$product和$attribute对象已经正确加载(比如避免在产品未初始化的页面执行)

如果你的原代码是挂载在其他钩子上(比如woocommerce_dropdown_variation_attribute_options_html),只需要调整获取属性slug的方式即可,核心逻辑都是先判断属性slug再执行代码。

内容的提问来源于stack exchange,提问作者Miguel Gomes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:46:05