私はWP_User_Queryを使ってユーザーのリストを表示しています。 この記事 によると、私はsearch_columnsパラメータを使って(wp_usersテーブルで想定している)特定の列にクエリを集中させることができます。
私の質問:
$args = array(
'search' => 'Rami',
'search_columns' => array( 'user_login', 'user_email', 'display_name' ),
);
$user_query = new WP_User_Query( $args );
私の目的は、照会をdisplay_name列に表示させることですが、それはうまくいかないようです。おもしろいことに、display_nameは articleの例では言及されている列ではありません しかし、wp_usersテーブルの 間違いなく 列です。
WP_User_Queryを使用しているときにdisplay_name列を検索する方法を教えてください。
これを試すことができます:
/**
* 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
でマークしました。
codex によると、display_nameはサポートされていません。
あなたはpre_user_queryフィルタを使うことができます。
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' );
あなたはおそらく関数内のフィルタを追加したり削除したいと思うでしょう。