如何通过显示名称或其一部分搜索糟糕的用户?


13

我需要创建一个搜索页面,其中将显示与提供的搜索相关的所有内容。即comments含有时eventspostsCPTS和users与该名称。

如何在网站的姓氏或姓氏包含搜索词的用户中搜索?

Answers:


24

搜索主表

只需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如果@searcharg中存在。
  • user_loginID如果searcharg是数字
  • user_url如果search字符串包含http://https://
  • 或... user_loginuser_nicename如果存在字符串。

所有这些默认值仅在 search_columns指定参数的情况下设置。

搜索元表

如果要通过first_name或进行搜索last_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']例如,您可能希望使用该内容。确保正确地保留它,并从字符串的开头和结尾除去不需要的空格。

请记住,这是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();

我要在哪个文件中添加此查询?
Naveen 2014年

@Naveen最适合的是functions.php您的模板,或者(最好)包装在自定义的迷你插件中,以免切换主题时失去功能。
kaiser 2014年

Kiaser感谢您的回复。请帮助我如何将这段代码集成到functions.php
Naveen 2014年

3
@Naveen在这里超出范围。您将必须学习一些有关代码的知识或寻找开发人员来为您完成这些工作。和阅读Q / A
kaiser 2014年

display_name是中的列wp_users。我想到两个问题。1:这是对数据库架构的最近更改吗?2:是否可以将其用作值search_columns而不是元查询?
henrywright

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.