为什么此筛选器挂钩在传递参数时不起作用?

时间:2013-02-26 作者:Emerson Maningo

假设我有一个连接到我的\\u get\\u users函数的函数:

function define_users($group) {

//Query database for users belonging to a group
global $wpdb;

$users= $wpdb->get_results("SELECT user_id from $wpdb->usermeta WHERE meta_key=\'groupname\' AND meta_value=$group",ARRAY_N);

return $users;

}

add_filter(\'my_get_users\',\'define_users\',10,1);
这是my\\u get\\u users函数,其中可以找到apply\\u筛选器:

function my_get_users($group) {

//Define users as array
$users=array();     


$users = apply_filters(\'my_get_users\', $users, $group);


    return $users;

}
我确信数据库中有数据,但$users变量作为空数组返回。你知道怎么了吗?谢谢你的帮助。

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

try this

$users = apply_filters(\'my_get_users\',$group);

SO网友:fischi

你这里有一些错误,但你的总体方向是正确的。

您的线路

apply_filters(\'my_get_users\', $users, $group);
表示将2个参数传递给函数my_get_users. 您将$users作为空数组传递,这是不必要的,但这里的主要问题是另一个问题。

你可以通过

add_filter(\'my_get_users\',\'define_users\',10,1);
这一行告诉WordPress您的函数define_users 接受1个参数(此行中第4个参数的值)。

因此WordPress尝试传递2个参数:

由于您的函数设置为仅接受一个参数,因此它只获取空的$users 大堆

在您的功能中define_users($group) $组获取以前$用户的值,因此在使用$group 在那里。

解决方案是(两种可能性):

只向过滤器传递一个参数

function define_users($group) {

    //Query database for users belonging to a group
    global $wpdb;

    $users= $wpdb->get_results("SELECT user_id from $wpdb->usermeta WHERE meta_key=\'groupname\' AND meta_value=$group",ARRAY_N);

    return $users;

}

add_filter(\'my_get_users\',\'define_users\',10,1);

function my_get_users($group) {

    $users = apply_filters(\'my_get_users\', $group);

    return $users;

}
为2个参数定义函数(本例中不使用)
function define_users($users, $group) {

    //Query database for users belonging to a group
    global $wpdb;

    $users= $wpdb->get_results("SELECT user_id from $wpdb->usermeta WHERE meta_key=\'groupname\' AND meta_value=$group",ARRAY_N);

    return $users;

}

add_filter(\'my_get_users\',\'define_users\',10,2);

function my_get_users($group) {

    //Define users as array
    $users=array();     

    $users = apply_filters(\'my_get_users\', $users, $group);

    return $users;

}
还有什么要说的请检查以下事项:您真的需要手动查询还是可以通过get_users?

结束