在过去的两天里,我试图为我的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
)
谢谢
我认为在WP_User_Query
建立一个sql查询,然后执行它。所以你不能做搜索的列内容使用IN
算子。因为最后的查询看起来像
SELECT * FROM users_meta WHERE user_id = 1 AND meta_key = 'user_skills' AND meta_value IN (121,122,123)
例如,如果你使用最新的MySQL,它支持JSON搜索。您可以将user_skills
保存为json。然后使用json搜索函数