【问题标题】:Using array in WP User Query在 WP 用户查询中使用数组
【发布时间】:2017-03-16 01:11:54
【问题描述】:

在过去的两天里,我正在尝试为我的 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 元字段中有一个数组,看起来像这样

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

                )

谢谢

【问题讨论】:

    标签: php arrays wordpress function parameter-passing


    【解决方案1】:

    我认为在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在其中搜索

    【讨论】:

    • 感谢您的见解,但是如果我使用数组(我认为),运算符 IN 是唯一可以使用的,这是来自 wordpress codex “meta_value (string|array) -自定义字段值(注意:数组支持仅限于比较值 'IN'、'NOT IN'、'BETWEEN'、'NOT BETWEEN'、'EXISTS' 或 'NOT EXISTS')“我稍后会研究 JSON 解决方案
    • 但是你可以使用json_encode()函数将你的数组转换为json字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    相关资源
    最近更新 更多