过去两天我正在尝试为我的Wordpress网站制作自定义搜索表单,但我找不到处理wp_user_query函数的方法。我正在尝试使用数组来搜索另一个数组。
这是我将数据保存到数据库的表单
<input type="checkbox" name="check_list[]" value="121">
<input type="checkbox" name="check_list[]" value="122">
<input type="checkbox" name="check_list[]" value="123">
<input type="checkbox" name="check_list[]" value="124">
<input type="submit" name="submit" value="Submit">
值表示技能ID
提交后......
$skills = $_POST['check_list'];
add_user_meta( $userID, 'user_skills', $skills);
所以现在我们在user_skills metafield中有一个数组,看起来像这样
s:48:"a:3:{i:0;s:3:"121";i:1;s:3:"122";i:2;s:3:"123";}";
在另一种形式中,您可以从所有可用技能中进行选择
<input type="checkbox" name="search_list[]" value="121">
<input type="checkbox" name="search_list[]" value="122">
<input type="checkbox" name="search_list[]" value="123">
<input type="checkbox" name="search_list[]" value="124">
<input type="submit" name="submit" value="Submit">
提交此表单后,就会发生这种情况。
$skills =$_POST['search_list'];
$ids = filter_var_array($skills,FILTER_SANITIZE_STRING);
$args = array(
'meta_key' => 'user_skills',
'meta_value' => $ids,
'meta_compare' => 'IN'
);
$user_query = new WP_User_Query($args);
foreach ( $user_query->results as $user ) {
echo '<li>' . $user->display_name . '</li>';
}
我也试过这个方法,但它不起作用
$args = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'user_skills',
'value' => $ids,
'compare' => 'IN',
),
),
);
此时我知道有3个用户符合搜索条件,但功能不会返回任何内容。
通过使用print_r
我可以看到该函数看到了数组,但它不能像我需要的那样工作
[meta_value] => Array
(
[0] => 121
[1] => 122
[2] => 123
)
由于
答案 0 :(得分:0)
我认为在WP_User_Query
内构建一个sql-query然后执行它。因此,您无法使用IN
运算符按列内容进行搜索。因为最终查询看起来像
SELECT * FROM users_meta WHERE user_id = 1 AND meta_key = 'user_skills' AND meta_value IN (121,122,123)
例如,如果您使用支持JSON搜索的最新MySQL。您可以将user_skills
保存为json。然后使用json search functions