4

我必须得到所有名字以字母“A”开头的用户。我使用 get_users() 函数获取用户信息。如何使用参数查询来获取名字字母以“A”开头的用户?

我使用了下面的功能

         <?php $users = get_users(array('role' => 'user_role', 
                                        'meta_key' => 'first_name',
                                        'meta_value' => 'A*',
                                        'meta_compare' => 'LIKE'));

我没有发现任何结果。这里有错误吗?

4

3 回答 3

5

为了使用LIKE,您需要使用meta_query

$args = array(
    'role' => 'user_role', 
    'meta_query' => array(
        array(
            'key' => 'first_name',
            'value' => array( 'A', 'B'),
            'compare' => 'BETWEEN'
        )
    )
);
$users= get_users($args);
于 2013-02-05T14:43:01.253 回答
1

如前所述,使用 LIKE 意味着它将匹配包含该字母的任何值,无论该字母是否位于开头。所以使用 LIKE 可能不会得到你想要的。

WordPress 中的方法似乎是使用“BETWEEN”比较,因此它将匹配单词介于一个字母和后续字母之间的任何值。

根据http://www.essentialwp.com/tag/meta_query/上的教程,您可以获取您希望单词开头的字符,然后使用 PHP 功能查找后续字符,这使您可以正确过滤结果。

// Get the value for surname and attach it to a variable
$letter = $_GET['surname'];]

// We need to establish the letter after the first letter from $letter, so in this case 'D'
$letterAfter = chr(ord($letter)+1);

// Craft a custom wp_query call
$args = array(
    'post_type' => 'profiles',  // use this if you are using a custom post type
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'surname', // name of your custom field
            'value' => array( $letter, $letterAfter ),
            'orderby' => 'meta_value',
            'compare' => 'BETWEEN',
            'order' => 'ASC'
        )
    )
 );
$wp_query = new WP_Query( $args );

// then run your loop....

您可能需要以不同的方式处理字母 Z,请参阅Get the users by first name start with letter “Z”</a>

您可能还对使用 PHP 获取字母表中下一个字母的最有效方法感兴趣

于 2014-07-15T05:28:36.557 回答
1

对于那些仍在为此苦苦挣扎的人,要使用 % 运算符,请尝试以下代码:

$args = array(
    'role' => 'user_role', 
    'meta_key' => 'first_name',
    'meta_query' => array(
        array(
            'key' => 'first_name',
            'value' => '^'.$search_term.'.*',
            'compare' => 'REGEXP'
        )
    )
);

此代码将返回以您要查询的字母开头的“first_name”,然后是任何内容。

此处的法典对此进行了解释: https ://codex.wordpress.org/Class_Reference/WP_User_Query#Custom_Field_Parameters

注 2:使用 'LIKE' 时,值参数更改为 '%%'。因此,在自定义字段值中的任何位置都会搜索该字符串。如果 value 参数包含一个 '%' 它被转义。因此它禁止搜索以某些字符开头的字符串,例如...要构造此查询,您必须在值参数中使用带有正则表达式的 'REGEXP'(例如:'^n.*' 匹配以 " 开头的所有值n”或“N”)。

于 2018-05-17T08:53:27.283 回答