在WP用户查询中使用数组

时间:2016-11-02 16:17:14

标签: php arrays wordpress function parameter-passing

过去两天我正在尝试为我的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

                )

由于

1 个答案:

答案 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

在其中搜索