Wordpress WP_User_Query从Ajax函数调用时会忽略' meta_query '



我有一个ajax函数,运行以下WP_User_Query:

$args2 = array(
'meta_query' => array(
'gender' => array(
'key'     => 'gender',
'value'   => 'female',
'compare' => '='
)
),
'number' => 10
);
$user_query = new WP_User_Query( $args2 );

查询返回未过滤的结果,基本上忽略了meta_query。如果我从functions.php或模板文件运行它,它会很好,但不是从ajax。知道为什么吗?

这是request字符串当它工作时:

SELECT SQL_CALC_FOUND_ROWS wp_users.ID
FROM wp_users INNER JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id 
)
WHERE 1=1 AND ( 
( wp_usermeta.meta_key = 'gender' AND wp_usermeta.meta_value = 'female' )
)
ORDER BY user_login ASC
LIMIT 0, 10

这是来自ajax函数的

SELECT SQL_CALC_FOUND_ROWS wp_users.ID
FROM wp_users
WHERE 1=1
ORDER BY user_login ASC
LIMIT 0, 10

我在functions.php中的查询函数

function export_users_function_test() {
$args = array(
'number' => 10,
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'employee',
'value' => '1',
'compare' => '='
),
array(
'key' => 'gender',
'value' => 'female',
'compare' => '='
),
array(
'key' => 'member',
'value' => '1',
'compare' => '='
)
)
);
$user_query = new WP_User_Query( $args );
return $user_query;
}
我的ajax函数调用查询函数。目标是生成一个CSV文件,其结果如下:
public function export_users_function() {
$params = $_POST['params'] ?: null;
$query = export_users_function_test() ?: null;
$users = $query ? $query->results : null;
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=export.csv');

$header = '"Email",';
while(have_rows('file_columns', 'option') ): the_row();
$header .= '"' . get_sub_field('column_name') . '",';
endwhile;
$header .=  "rn";
if ($users) {
foreach ($users as $user) {
$header .= '"' . $user->user_email . '",';
while(have_rows('file_columns', 'option') ): the_row();
$header .= '"' . get_user_meta( $user->ID, get_sub_field('user_meta_key'), true) . '",';
endwhile;
$header .=  "rn";
}
}
echo wp_send_json($header);
}

根据文档你的语法是无效的。

如果你只查询一个元键&值则使用简化版本。理想情况下,meta_query应该用于多个查询或更复杂的查询。

$args2 = array(
'meta_key' => 'gender',
'meta_value' => 'female',
'meta_compare' => '=',
'number' => 10
);
$user_query = new WP_User_Query( $args2 );

最新更新