WordPressのユーザー一覧管理画面のユーザー検索機能の絞り込み内容を拡張できるようにする実装方法
みなさんこんにちは!エンジニアの高澤です!
今回はWordPressのユーザー一覧管理画面のユーザー検索機能の絞り込み内容を拡張できるようにする実装方法について解説していきたいと思います。
今回の内容は、例えばWordPressで会員サイトを構築して運用している場合などに大変有効かと思います。
WordPressで会員サイトを構築する場合はあらかじめ機能として備わっているデフォルトのユーザー機能を利用することになるので、大量のユーザー情報が存在することになるかと思います。
そんな時にお役立ていただけるのが今回の内容なので、よろしければぜひお仕事で当記事の内容をご利用いただけましたら幸いです。
当記事の実装内容
まずは当記事の実装内容についてご説明しておきたいと思います。
結論としては、タイトルにもありますように「WordPressのユーザー一覧管理画面のユーザー検索機能の絞り込み内容を拡張できるようにする」という内容になります。
通常WordPressのデフォルトの状態だと、ユーザー名やメールアドレスなどの基本的な情報しか検索対象になりませんが、当記事の内容を実装することで、ファーストネーム、ラストネーム、ニックネームなどの追加の情報も検索対象に含めることができます。
上図の部分の絞り込み検索機能の検索要素を拡張することができます。
当記事の内容を実装することのメリット
当記事の内容を実装することによって以下のメリットがあるかと思います。
- 任意のデータ項目で検索することができる
- 運用の効率化
当記事で掲載しているサンプルコードをご自身のWordPressに適した形でカスタマイズしていただくことにより、大量のユーザーデータを効率的に絞り込むことができます。
実装する方法
それでは早速実装する方法について解説していきたいと思います。
以下のコードをfunctions.phpにコピー&ペーストしてください。
<?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;
// ユーザーメタデータをJOINして検索条件を拡張する
$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' );
}
}
}
// pre_user_query フックに上記関数を追加してユーザー検索を拡張する
add_action( 'pre_user_query', 'extended_user_search' );
ペーストして保存していただき、管理画面ページを更新していただくと実装は完了です。
あとは実際に検索して確認してみてください。
また、当記事でご紹介したサンプルコードをカスタマイズしていただければより検索要素を増やしたりすることができ、応用することが可能です。
よろしければぜひお試しください。
コードの説明
上記コードは、WordPressのユーザー検索機能を拡張し、デフォルトのユーザー名やメールアドレスに加え、名前(first_name, last_name, nickname)でも検索できるようにしています。具体的には、pre_user_query
というフックを使って、ユーザー検索クエリが実行される前にカスタマイズを行います。
まず、extended_user_search
()関数という独自の関数が定義されています。この関数では、検索が実行された際にクエリ内の検索キーワードが存在するかを確認し、$_REQUEST['s']
でリクエストから送信された検索キーワードを取得して、現在の検索クエリと比較します。
検索キーワードが一致した場合、$wpdb->usermeta
テーブルを使ってユーザーメタ情報をクエリにJOINします。これにより、ユーザーのfirst_name
, last_name
, nickname
フィールドも検索対象に含めることができます。具体的には、JOIN
を使ってusermeta
テーブルをusers
テーブルと結合し、該当するメタデータを検索可能な形で追加しています。
最後に、query_where
に条件式を設定し、get_search_sql
メソッドを使って、user_login
やuser_email
、user_nicename
に加えて、first_name
, last_name
, nickname
フィールドを検索対象として追加しています。これにより、ユーザーの名前でも検索できるようになります。
最終的に、この関数はpre_user_query
フックに登録されて、ユーザー検索が実行される際に適用されるようになります。
まとめ
WordPressのユーザー一覧管理画面のユーザー検索機能の絞り込み内容を拡張できるようにする実装方法についての解説は以上になります。
今回の内容は、WordPressで会員サイトを構築して運用している場合などに重宝されるテクニックになってくるかと思います。
WordPressで会員サイトを構築する場合は多くの場合、WordPressデフォルトのユーザー機能を利用することになるので、大量のユーザー情報を管理しなければならなくなります。
そんな時にユーザーを任意のデータ項目で検索できるようになることで運用上効率化につながるかと思いますので、よろしければぜひ当記事をお役立ていただけましたら幸いです。
お気軽に皆さんのご要望をお聞かせください!
どんなに些細なことでも構いません!よろしければ記事や当サイトへの「こんな記事があったら仕事とかで役に立つな〜」や「こうだったらもっと役に立つのに!」といったようなご要望等をお気軽にお聞かせください!今後のサービス改善にお役立てさせていただきます!
例1)Reactの技術記事を書いてほしい!
例2)WordPressの使い方とかを初心者向けに解説してほしい!...など