こんにちは、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を取得してキーワード検索を実行する方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。