ハシウェブ

Web制作、プログラミングに関する情報を発信するブログ

【WordPress】管理画面のユーザー一覧で検索項目を追加する方法

【WordPress】管理画面のユーザー一覧で検索項目を追加する方法

wordpressを使った会員サイトをつくっていて、管理画面のユーザー一覧の検索項目を追加しないといけない案件があったのでまとめておきます。

目次
  1. 管理画面のユーザー一覧に検索項目を追加する方法
  2. 注意点
    1. 波括弧はいらない?
    2. カスタムフィールドにデータがないユーザーは検索対象とみなされない
  3. 参考サイト

管理画面のユーザー一覧に検索項目を追加する方法

以下のコードを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 = 'pref'";
    	$user_query->query_from .= " JOIN $wpdb->usermeta as UM2 ON UM2.user_id = $wpdb->users.ID AND UM2.meta_key = 'address'";
    	$user_query->query_from .= " JOIN $wpdb->usermeta as UM3 ON UM3.user_id = $wpdb->users.ID AND UM3.meta_key = 'first_name'";
    	$user_query->query_from .= " JOIN $wpdb->usermeta as UM4 ON UM4.user_id = $wpdb->users.ID AND UM4.meta_key = 'last_name'";

    	$user_query->query_where = 'WHERE 1=1' . $user_query->get_search_sql(
    	  $search,
    	  array(
    	    'user_login',
    	    'user_email',
    	    'display_name',
    	    'UM1.meta_value',
    	    'UM2.meta_value',
    	    'UM3.meta_value',
    	    'UM4.meta_value'
    	  ),
    	  'both'
    	);
    }
  }
}
add_action('pre_user_query', 'extended_user_search');

私の場合は、参考にさせていただいたコードではうまくいかず、このコードでユーザー検索に項目を追加することができました。

注意点

波括弧はいらない?

「$wpdb->usermeta」「$wpdb->users」この部分で波括弧があると検索が効きませんでした。
詳しい原因は究明できていませんので、もしこのコードでうまくいかない場合はこちらの記事のコードで書いてみてください。

{ $wpdb->usermeta }
 ↓
$wpdb->usermeta

{ $wpdb->users }
 ↓
$wpdb->users

カスタムフィールドにデータがないユーザーは検索対象とみなされない

コードを変更してユーザー検索はすぐできるようになったのですが、なぜか検索に反映されないユーザーがありました。

悩み

数時間いろいろ試してわかったのは、管理画面からデフォルトでユーザー登録をした場合、カスタムフィールド(今回の場合はsmart custom fields)の設定はしていても何も登録されていない状態だったからです。
wordpressのデータベースを確認してみると「●●_usermeta」に、反映されないユーザーのID(user_id)がない状態です。

これを解消するには

  • 該当するユーザーの編集画面で検索項目(カスタムフィールド)に値を入力して更新する
  • もし空欄でいい項目だとしても「ユーザーを更新」だけをクリックする
  • デフォルトのユーザー登録で、検索項目にしたいカスタムフィールドの入力項目をつくっておく。

「meta_keyに値が入力されmeta_valueは空欄」の状態で登録されます。
反映されないユーザーのID(user_id)に、検索項目のmeta_keyがある状態にすることで、検索に反映されていなかったユーザーを検索対象とすることができました。

●●_usermeta

根本解決としてはユーザー登録にカスタムフィールド入力欄を追加することが必要だと思います。(今回は未検証です)

参考サイト