在WP用户查询中使用数组


Using array in WP User Query

在过去的两天里,我试图为我的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搜索函数