如何使用WP_USER_QUERY搜索DISPLAY_NAME列

时间:2014-10-24 作者:henrywright

我正在使用WP\\u User\\u Query返回用户列表。根据this article, 我可以使用search\\u columns参数将查询集中在特定列上(假设在wp\\u users表中)。

我的查询:

$args = array(
    \'search\' => \'Rami\',
    \'search_columns\' => array( \'user_login\', \'user_email\', \'display_name\' ),
);
$user_query = new WP_User_Query( $args );
我的目标是在display\\u name列中查看查询,但这似乎不起作用。有趣的是,display\\u name不是article example 但事实确实如此definitely wp\\U users表中的一列。

使用WP\\u User\\u查询时,如何搜索display\\u name列?

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

您可以尝试以下操作:

/**
 * Add support for the "display_name" search column in WP_User_Query
 * 
 * @see http://wordpress.stackexchange.com/a/166369/26350
 */
add_filter( \'user_search_columns\', function( $search_columns ) {
    $search_columns[] = \'display_name\';
    return $search_columns;
} );
我们使用user_search_columns 筛选以修改可用的搜索列。

那么这个过滤器可以使用哪些字段呢?以下是wp_users 表格:

x ID
x user_login
  user_pass
x user_nicename
x user_email
x user_url
  user_registered
  user_activation_key
  user_status
  display_name
其中,我已将默认搜索列标记为x.

SO网友:shanebp

根据codex, 不支持display\\u name。

您可以使用pre\\u user\\u查询筛选器。

function henry_display_name_find( $query ) {
    global $wpdb;

    /* you don\'t say where the name comes from - this assumes a $_POST field */
    $display_name = $_POST[\'display_name\'];

    $use_like_syntax = false;

    if ( $use_like_syntax = true ) {
        $query->query_where .= $wpdb->prepare( " AND $wpdb->users.display_name LIKE %s", \'%\' . like_escape( $display_name ) . \'%\' );
    } else {
        $query->query_where .= $wpdb->prepare( " AND $wpdb->users.display_name = %s", $display_name );
    }
}
add_action( \'pre_user_query\', \'henry_display_name_find\' );
您可能需要在函数中添加和删除过滤器。

结束