【WordPress】【pre_get_posts】$_GETパラメータを取得してキーワード検索を実行する
※本ページのリンクにはプロモーションが含まれています。
こんにちは、Ryohei(@ityryohei)です!
本記事では、WordPressのpre_get_postsを使って、$_GETパラメータ(クエリ文字列)を取得してキーワード検索を実行する方法をご紹介しています。
WordPressのpre_get_postsで$_GETパラメータを取得してキーワード検索を実行するにはどうすればいいんだろう?
上記の疑問にお答えします。
では、解説していきます。pre_get_postsで$_GETパラメータを取得する
pre_get_posts
はクエリ情報を書き換える際に使用するフックです。pre_get_posts
を使用することで、メインループで取得することができるクエリ情報を任意のパラメータで絞り込むことができます。
ここではpre_get_posts
を使って、対象ページのURLから$_GETパラメータ(クエリ文字列)の値を取得し、キーワード検索を実行してみます。対象は投稿アーカイブとし、pre_get_posts
内で$_GETパラメータのダンプを出力してみます。
PHP(functions.php)
function custom_pre_get_posts($query){ if(is_admin() || !$query->is_main_query()){ return ; } if(is_archive()){ if($_GET){ var_dump($_GET); } } } add_action('pre_get_posts', 'custom_pre_get_posts');
上記をテーマ内のfunctions.php
に追加して投稿アーカイブページのURLに$_GETパラメータを追加してアクセスします。
例:http://localhost/archive/?keyword=テスト
実行すると$_GETパラメータのダンプ結果がページの一番上に出力されます。
pre_get_postsで$_GETパラメータの値でキーワード検索する
前項のコードに少しスクリプトを追加して$_GETパラメータの値でキーワード検索を実行します。
WordPressでキーワードで投稿を絞り込む場合は、s
というキーに任意の値を指定することで実現できます。p
PHP(functions.php)
function custom_pre_get_posts($query){ if(is_admin() || !$query->is_main_query()){ return ; } if(is_archive()){ if($_GET['keyword']){ $query->set('s', $_GET['keyword']); } } } add_action('pre_get_posts', 'custom_pre_get_posts');
上記をfunctions.phpに追加して投稿アーカイブページにkeywordという$_GETパラメータを追加してアクセスします。
例:http://localhost/archive/?keyword=テスト
ページにアクセスすると、keywordの値に指定したテストというテキストを持つ投稿情報が出力されます。
最後に
pre_get_posts
はクエリ情報を操作するWordPressの基本的なフックです。クエリの取り扱い方さえわかればWordPressではほとんどのことが実現できるようになります。ぜひ使い方をマスターして思い通りにクエリを操作できるようになりましょう!
以上、WordPressのpre_get_postsで$_GETを取得してキーワード検索を実行する方法のご紹介でした!