带有多个参数和多个添加过滤器的应用过滤器(_F)

时间:2016-07-24 作者:Peter Bushnell

我正在使用apply\\u过滤器来弥补插件之间的差距,但我正在努力解决这些问题。有一个参数,一个数组,有几个add\\u filter实现来匹配apply\\u filters,每个实现都传递原始数组并添加到其中。

似乎可以从apply\\u filter传递多个参数,但add\\u filter只能返回一个参数,这是否正确,或者如何处理add\\u filter调用之间的多个参数?

我需要传递帐户ID的第二个参数,但根据优先级,似乎只有第一个add\\u过滤器才能使用该参数。我计划将这两个参数包装到一个数组中并传递它,这样一个数组的第一个值是一个数组,第二个参数是一个用户ID。

Edited to add example

$error = apply_filters(\'check_for_more_errors\', $userid, $error);

add_filter(\'check_for_more_errors\', \'error_check_1\', 1, 2);

function error_check($userid, $error){
    $error[] = get_user_meta($userid, \'Plugin 1 user error\', true);
    return $error;
}

add_filter(\'check_for_more_errors\', \'error_check_2\', 2, 2);

// $userid below is actually $error returned from error_check_1 
function error_check_2($userid, $error){
    $error[] = get_user_meta($userid, \'Plugin 2 user error\', true);
    return $error;
}
上述情况并没有如我所期望或需要的那样起作用。过滤器似乎是菊花链,第一个过滤器的返回参数作为参数传递给下一个过滤器。

我希望得到$id变量和$error变量,如示例中所示。

1 个回复
最合适的回答,由SO网友:Ismail 整理而成

apply_filters 要求您在此函数的第二个参数中传递要过滤的值(在挂钩标记名称之后)

$error = apply_filters(\'check_for_more_errors\', $error, $userid);

add_filter(\'check_for_more_errors\', \'error_check_1\', 1, 2);

function error_check_1($error, $userid){
    $error[] = get_user_meta($userid, \'Plugin 1 user error\', true);
    return $error;
}

add_filter(\'check_for_more_errors\', \'error_check_2\', 2, 2);

function error_check_2($error, $userid){
    $error[] = get_user_meta($userid, \'Plugin 2 user error\', true);
    return $error;
}

相关推荐

Apply_Filters()对所需的参数进行切片

我正在尝试向WooCommerce订单中的每个退款行添加一个按钮(其功能超出了这个问题的范围,足以说明它需要退款id作为参数)。我发现这些行是在woocommerce\\includes\\admin\\meta Box\\views\\html订单退款中创建的。无法重写的php。然而,有一项行动:do_action( \'woocommerce_admin_order_item_values\', null, $refund, $refund->get_id() ); 这似乎非常适合我的