如何搜索(部分匹配)WordPress用户的显示名称?

时间:2013-07-03 作者:hannit cohen

我需要创建一个搜索页面,该页面将显示与提供的搜索相关的任何内容。i、 e。comments 包含它,events, posts, CPTs和users 用那个名字。

如何在网站中搜索名字或姓氏包含搜索短语的用户?

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

搜索主表

只需使用WP_User_Query 使用搜索参数。

因此,如果您想搜索一个在其user_email 或类似列{$wpdb->prefix}users 表,则可以执行以下操作:

$users = new WP_User_Query( array(
    \'search\'         => \'*\'.esc_attr( $your_search_string ).\'*\',
    \'search_columns\' => array(
        \'user_login\',
        \'user_nicename\',
        \'user_email\',
        \'user_url\',
    ),
) );
$users_found = $users->get_results();
请记住* 是通配符。因此限制,例如user_email 到单个域将为您提供以下搜索字符串:*@example.com.

这个search 字符串有一些“神奇”的特性:search_columns 默认为。。。

  • user_email 如果@ 中存在search 参数
  • user_loginID 如果search arg是数字user_url 如果search 字符串包含http://https://user_login 和user_nicename 如果存在字符串
只有在“否”时才设置所有这些默认值search_columns 已指定参数。

如果要搜索,请搜索元表,例如first_namelast_name, 那么你必须做一个meta_query 因为它们不是主表的一部分:

$search_string = esc_attr( trim( get_query_var(\'s\') ) );
$users = new WP_User_Query( array(
    \'meta_query\' => array(
        \'relation\' => \'OR\',
        array(
            \'key\'     => \'first_name\',
            \'value\'   => $search_string,
            \'compare\' => \'LIKE\'
        ),
        array(
            \'key\'     => \'last_name\',
            \'value\'   => $search_string,
            \'compare\' => \'LIKE\'
        )
    )
) );
$users_found = $users->get_results();
确保检索到正确的搜索字符串。通常情况下get_query_var(\'s\');, 但它可以-取决于你的状态name/id 以及您可能希望使用$_GET[\'user_search\'] 例如确保正确地对其进行esacpe,并从字符串的开头和结尾删除不需要的空白。

请记住,这是一个array( array() ) 因为有relation 钥匙如果只想搜索单个键,只需执行以下操作可能会更容易:

$search_string = esc_attr( trim( get_query_var(\'s\') ) );
$users = new WP_User_Query( array(
    \'meta_key\'     => \'first_name\',
    \'meta_value\'   => $search_string,
    \'meta_compare\' => \'LIKE\',
) );
$users_found = $users->get_results();
最终查询的结果可能接近以下内容:

$search_string = esc_attr( trim( get_query_var(\'s\') ) );
$users = new WP_User_Query( array(
    \'search\'         => "*{$search_string}*",
    \'search_columns\' => array(
        \'user_login\',
        \'user_nicename\',
        \'user_email\',
        \'user_url\',
    ),
    \'meta_query\' => array(
        \'relation\' => \'OR\',
        array(
            \'key\'     => \'first_name\',
            \'value\'   => $search_string,
            \'compare\' => \'LIKE\'
        ),
        array(
            \'key\'     => \'last_name\',
            \'value\'   => $search_string,
            \'compare\' => \'LIKE\'
        )
    )
) );
$users_found = $users->get_results();

SO网友:Harkály Gergő

这帮助了我,而不是凯撒的回答:https://laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/

但在这个解决方案中$wpdb->escape($usermeta_keys) 函数生成了一个错误,所以我只使用$usermeta_keys.

结束

相关推荐

Extend the wp_users table

我想延长wp_users 我的WordPress数据库中的表为什么?我希望人们在我的网站上唱歌时能增加更多关于自己的信息。我知道如何扩展它,但我担心当WordPress需要更新时wp_users 表,即我添加的列,将被删除。我这里有任何人在扩展wp_users 桌子更新WordPress版本时,是否会更新此表?