Wordpress:应用过滤器时回调函数出错

时间:2013-11-13 21:39:02

标签: wordpress warnings message add-filter

尝试在过滤器钩子中使用某些参数时,我收到警告。

警告:在C:\ WAMP \ WWW \ FRANK \ WP-CONTENT \ THEMES \ TWENTYTHIRTEEN \ FUNCTIONS.PHP在线688上UPDATE_SALE()缺少论点2

警告:在C:\ WAMP \ WWW \ FRANK \ WP-CONTENT \ THEMES \ TWENTYTHIRTEEN \ FUNCTIONS.PHP ON LINE 688上UPDATE_SALE()缺少论点3

这是我试图挂钩的过滤器的签名

echo apply_filters(
            'woocommerce_sale_flash', 
            '<span class="onsale">'.__( 'Sale!', 'woocommerce' ).'</span>', 
            $post, 
            $product);

这是我的自定义过滤器操作

function update_sale( $content, $post, $product ) {
    $content = '<span class="onsale">'.__( '25% Off!', 'woocommerce' ).'</span>';
    return $content;
}
add_filter('woocommerce_sale_flash', 'update_sale');

当我在函数声明中包含其他参数$ post和$ product时,我会收到上面的警告。我认为$ post和$ product会让我访问术语数据。

那我在这里错过了什么?

感谢

1 个答案:

答案 0 :(得分:1)

WordPress add_filter函数将使用默认的一个参数调用update_sale函数。 http://codex.wordpress.org/Function_Reference/add_filter同样在这些函数中,将post对象作为全局变量捕获通常更容易。您可以对产品var执行相同的操作。但是,如上所述,该函数甚至不使用这些变量,因此您可以省略它们。 [编辑:OP指出当在调用函数中设置第4个参数时,全局变量可用而不显式调用它们。]

你可以尝试:

function update_sale($content = '', $post = NULL, $product = NULL){
  global $post;
  // now you can access the post object here if you need to.
  $content = '<span class="onsale">'.__( '25% Off!', 'woocommerce' ).'</span>';
  return $content;
}
add_filter('woocommerce_sale_flash', 'update_sale', 10, 3);

add_filter的第四个参数告诉WordPress你的update_sale函数接受三个参数。