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

WordPress如何在apply_filters回调中获取$vars变量值?

解决方法:在过滤器回调中访问额外参数

你遇到的问题核心是没有正确接收过滤器传递的额外参数。WordPress的add_filter默认只传递1个参数(也就是过滤器的初始值$text),但你的apply_filters调用里传了3个参数:$text、$product_item->ID和$vars->ID。要拿到后面这两个参数,需要做两步修改:


1. 修改add_filter,指定接收的参数数量

在注册过滤器时,需要添加第四个参数(接受的参数总数),这里设为3,因为apply_filters传了3个参数:

add_filter( 'prefix_xml_feeds_productname_variant', 'custom_product_name', 10, 3 );
  • 10是过滤器的优先级(默认值,可根据需要调整)
  • 3表示回调函数要接收3个参数

2. 调整回调函数,接收并使用额外参数

把你的回调函数改成接受这3个参数,其中第三个参数就是你要的$vars->ID值。另外,建议通过产品ID获取产品对象,比用global $product更可靠(避免上下文变量不存在的问题):

function custom_product_name( $text, $product_id, $var_id ) {
    // 通过产品ID获取WooCommerce产品对象
    $product = wc_get_product( $product_id );
    // 如果产品不存在,返回原文本避免报错
    if ( ! $product ) {
        return $text;
    }

    $product_name = $product->get_name();
    $sku = $product->get_sku();
    // 这里的$var_id就是你需要的$vars->ID
    $text = 'Example.com ' . $sku . ' ' . $product_name . ' ' . $var_id;

    return $text;
}

额外说明:如果需要$vars对象而非ID

如果你的场景中必须使用完整的$vars对象(而不只是它的ID),那需要修改原始的apply_filters调用,把第三个参数从$vars->ID改成$vars:

$text = apply_filters( 'prefix_xml_feeds_productname_variant', $text, $product_item->ID, $vars );

然后回调函数的第三个参数就变成了$vars对象,你可以直接用$vars->ID:

function custom_product_name( $text, $product_id, $vars ) {
    $product = wc_get_product( $product_id );
    if ( ! $product ) {
        return $text;
    }

    $product_name = $product->get_name();
    $sku = $product->get_sku();
    $text = 'Example.com ' . $sku . ' ' . $product_name . ' ' . $vars->ID;

    return $text;
}

当然,这种情况需要你有权限修改那个apply_filters的代码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:02:33