【问题标题】:Second parameter of a Woocommerce hooked function returns NULL instead of an ObjectWoocommerce 挂钩函数的第二个参数返回 NULL 而不是 Object
【发布时间】:2019-03-11 01:49:28
【问题描述】:

在 Woocommerce 文档中,位于 get_price_html() 方法中的 woocommerce_get_price_html 过滤器钩子应该接受一个回调,该回调最多接受 两个参数,一个价格和一个产品。

但是当我尝试访问该产品时,我得到的是 NULL 而不是 WC_Product 对象。

这是我的测试代码:

add_filter( 'woocommerce_get_price_html', function( $price, $item ) {
    echo var_dump ($item); // NULL
    return $price;
});

我错过了什么吗?

【问题讨论】:

  • 这只是我的想法,但是 add_filter 没有接受一个参数来说明回调需要多少个参数?
  • @Chipster 为什么是的!该参数默认为 1,这清楚地说明了为什么我的第二个参数为 NULL。谢谢!

标签: php wordpress woocommerce parameters hook-woocommerce


【解决方案1】:

你需要在你的钩子函数中声明你用于这个钩子的 2 个参数,就在钩子优先级之后,这样:

add_filter( 'woocommerce_get_price_html', function( $price, $product ) {
    echo var_dump ($product); // The WC_Product object instance
    return $price;
}, 10, 2 );

最好给你的函数命名,比如:

add_filter( 'woocommerce_get_price_html', 'filter_woocommerce_get_price_html', 10, 2 ); 
function filter_woocommerce_get_price_html( $price, $product ) {
    echo var_dump ($product); // The WC_Product object instance
    return $price;
}

这次应该可以拿到变量$product对象了……

请参阅有关 add_action()add_filter() WordPress 函数的文档。

【讨论】:

  • 谢谢!为什么命名函数比创建匿名函数更好?
  • @SamRitter 因为它允许为挂钩函数设置可读且可用的引用,以便进一步(稍后)使用。这是一个好习惯,就像注释、格式化代码或添加可理解的变量名称一样……此外,如果您需要重用钩子并且再次使用匿名函数,则会出现错误。
【解决方案2】:

这个过滤器有 3 个地方被钩住了。其中三个有两个参数。

试试这个方法

add_filter( 'woocommerce_get_price_html', 'alter_price', 10, 2 );

function alter_price( $price, $item ) {
    echo var_dump ($item); 
    return $price;
}

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 2021-11-10
    • 2017-04-11
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多