6
add_filter('wp_list_pages_excludes', 'gr_wp_list_pages_excludes');

function gr_wp_list_pages_excludes($exclude_array) {    
    $id_array=$array('22');
    $exclude_array=array_merge($id_array, $exclude_array);
    return $exclude_array;
}

我是wordpress的新手。上面的代码工作正常。但我需要传递额外的参数,比如 $mu_cust_arg 给函数 gr_wp_list_pages_excludes。如何通过 apply_filters 或任何其他方法使用它?任何帮助表示赞赏。

提前致谢。

4

3 回答 3

5

因为 WP 不接受闭包作为回调(至少,肯定不是 for add_filter()),所以简短的回答是“你不能”。至少,不是以整洁的方式。

这里有几个选项,具体取决于您在做什么。第一个是最好的,但你可能无法使用它:

编写一个调用您的函数的包装函数

function gr_wp_list_pages_excludes_1 ($exclude_array) {
  $custom_arg = 'whatever';
  gr_wp_list_pages_excludes_1($exclude_array, $custom_arg)
}

这仅在您始终在给定情况下传递相同的自定义参数时才有效 - 您将为每种不同的情况编写这些包装器函数之一,并将包装器函数的名称传递给add_filter(). 或者,如果您希望它真正具有动态性,则需要...

使用全局变量:(参考:变量范围 $GLOBALS

function gr_wp_list_pages_excludes($exclude_array) {
    global $gr_wp_list_pages_excludes_custom_arg;
    $id_array=$array('22');
    $exclude_array=array_merge($id_array, $exclude_array);
    return $exclude_array;
}

使用这种方法意味着您可以通过$gr_wp_list_pages_excludes_custom_arg在全局范围内分配您喜欢的任何数据将其传递到函数中。这通常被认为是不好的做法,并且非常不受欢迎,因为它会产生混乱和不可读的代码,并使内存空间充满额外的变量。请注意,我已将变量名称设置为非常长且特定于函数以避免冲突 - 使用全局变量的另一个问题。虽然这会起作用,但只有在绝对必要时才使用它。

于 2012-08-01T06:25:10.170 回答
5

您确实可以向过滤器/操作添加多个参数,您只需要告诉 WordPress 期望有多少参数

示例,这将不起作用:

add_filter('some_filter', function($argument_one, $argument_two) {
    // won't work
}); 

apply_filters('some_filter', 'foo', 'bar'); // won't work

它将失败,并显示提供了太多参数的错误。

相反,您需要添加以下内容:

add_filter('some_filter', function($argument_one, $argument_two) {
    // works!
    $arugment_one; // foo
    $arugment_two; // bar
}, 10, 2);  // 2 == amount of arguments expected

apply_filters('some_filter', 'foo', 'bar'); 
于 2020-01-22T16:38:53.407 回答
3

非常简单!

add_filter('filter_name','my_func',10,3);     //three parameters lets say..
my_func($first,$second,$third){
  //............
}

然后

echo apply_filters('filter_name',$a,$b,$c);
于 2015-05-14T09:19:45.467 回答