WordPressの逆引き作業メモ

このブログはWordPressで業務に使った時の自分の作業用のポイントメモです。

WordPressの管理画面でユーザーを名前でも検索できるようにする

f:id:jinkosky2009:20200204201704p:plain

WordPressのユーザー一覧で、多くのユーザーやゲスト登録をしているサイトなどでは、メールアドレスやユーザー名以外で検索したいと言われる事もあります。

特に名前で検索したいと言われる事が多いため、その方法もメモしておきます。

f:id:jinkosky2009:20200204202043p:plain

このように名前を入力していても、右上のユーザー検索に「田中」と入力して検索しても該当なしとなります。

エンドユーザーやクライアントはには、これはできないほうが違和感があるようで、どうして検索できないのか?と聞かれます。

 

 

 

これを、解消するにはuser_queryをfunctions.phpに追記して検索のクエリーを追記します。

 

function extended_user_search( $user_query ) {
  if ( $user_query->query_vars['search'] ){
    $search = trim( $user_query->query_vars['search'], '*' );
    if ( $_REQUEST['s'] == $search ){
      global $wpdb;

      $user_query->query_from .= " JOIN {$wpdb->usermeta} as UM1 ON UM1.user_id = {$wpdb->users}.ID AND UM1.meta_key = 'first_name'";
      $user_query->query_from .= " JOIN {$wpdb->usermeta} as UM2 ON UM2.user_id = {$wpdb->users}.ID AND UM2.meta_key = 'last_name'";
      $user_query->query_from .= " JOIN {$wpdb->usermeta} as UM3 ON UM3.user_id = {$wpdb->users}.ID AND UM3.meta_key = 'nickname'";

      $user_query->query_where = 'WHERE 1=1' . $user_query->get_search_sql( $search, array( 'user_login', 'user_email', 'user_nicename', 'UM1.meta_value', 'UM2.meta_value', 'UM3.meta_value' ), 'both' );

    }
  }
}
add_action( 'pre_user_query', 'extended_user_search' );

 このコードを追加することで、検索対象が姓・名・ニックネームも追加されます。部分一致になりますので、「田中」でしたら「田」だけでも対象となります。