【WordPress】$_GETパラメータでtax_queryを切り替え、カスタムタクソノミ絞り込みを行う方法
| 更新: 2025/05/15 | 3615文字

今回はWordPressカスタマイズでよく使う(かもしれない)、カスタム投稿&カスタムタクソノミ話題です。お仕事でもつかったことがあるんですけど、『GETメソッドでパラメータ渡して、絞り込むカスタムタクソノミ(カテゴリーみたいなやつ)を切り替えられたら便利かな』というような発想でした。さっそくやり方を確認していきましょう。
目次
カスタムタクソノミ切り替えて絞り込み機能を作る~下準備は?
カスタム投稿・カスタムタクソノミを使えるようにテーマ設定する
下準備として上記のコードをfunctons.php内に書きました。オブジェクト型になっていますが、中身はよくあるカスタム投稿追加のコードです。register_post_type(カスタム投稿タイプの登録)・register_taxonomy(カスタム投稿タイプのタクソノミ(カテゴリみたいなやつ・分類))が実行されます。
今回は投稿タイプ名foodinfo(labelが食べ物情報)と、foodinfoに対して割り当てられるfoodinfo-cat(これがタクソノミ・カテゴリ名)というのを設定しました。
register_post_type(WordPress Developer Resources)
https://developer.wordpress.org/reference/functions/register_post_type/
register_taxonomy(WordPress Developer Resources)
https://developer.wordpress.org/reference/functions/register_taxonomy/
作った投稿タイプfoodinfoのタクソノミ(foodinfo-cat)を設定し、テスト用の記事を作成する
カスタム投稿・カスタムタクソノミを使えるようにしたあとは、設定とテスト記事作成します。カスタムタクソノミ『foodinfo-cat』の設定は以下の通りです(name/slug)。わかりやすく食べ物にしました。
name | slug |
---|---|
カレー | curry |
どんぶり | don |
麺類 | men |
寿司 | sushi |
あとは、設定したカスタムタクソノミごとにテスト記事を作っていきます。
任意の固定ページで、カスタム投稿一覧出力するパーツをロード(get_template_part)
準備はまだあります。archiveをそのまま使ってもいいんですけど、管理人は『特定の固定ページで、カスタム投稿アーカイブ用のパーツをロードする』という方法をとることにしました。以下のコードを、テーマのpage.phpに追加。the_content()の下に書いたので、本文の下にアーカイブが出ます。
get_template_part('parts/customArchive');
}?>
『is_page(4582)は、idが4582番の固定ページの場合』という意味で、この固定ページをカスタム投稿アーカイブ用にします。そこでテーマ内に作った『parts/customArchive.php』を、get_template_partでロードします。
get_template_part(WordPress Developer Resources)
https://developer.wordpress.org/reference/functions/get_template_part/
(WPインストールディレクトリ内でやる場合)query_varsフックでパラメータ登録する
WordPressのインストールディレクトリ・テーマ内でやるとき、『urlパラメータを使おうとして$_GETからとってきたけど、その変数が空になっていた』みたいなことはなかったでしょうか。それはパラメータが登録されていないからです。例えば『https://〇〇〇.com?cat=☆☆』みたいなパラメータを使いたい場合、function.phpに以下のようなコードを書きます。
$query_vars[]= 'cat';
return $query_vars;
}
add_filter('query_vars', 'set_query_vars_page');
query_varsフックをつかって『cat』というパラメータを使えるようにしました。
query_vars(WordPress Developer Resources)
https://developer.wordpress.org/reference/hooks/query_vars/
$_GETパラメータでtax_queryを切り替え、カスタムタクソノミ絞り込みを行うコード例
で、先ほど用意したparts/customArchive.phpの中身は、このような形になりました。
軽くポイント解説すると、まず『$terms =get_terms('foodinfo-cat');』でカスタムタクソノミ一覧とれるけど、オブジェクト階層が深いので、ループ回してarray_pushで$tarmArrにスラッグだけ入れて、$_GET['cat']がセットされてて、かつ$tarmArr内にその値がある場合に、tax_queryに渡す配列($taxQueryArgs)の中身が設定されるという形です。
$_GET['cat']が無い、あっても$tarmArr内にある値とマッチしない場合は、$taxQueryArgsは空なのでカスタムタクソノミ絞り込みが行われません。tax_queryを変数にしてるんですけど、中身が少しわかりやすいかなと思います。
あとはよくあるWordPressの記事出力コードですが、最近引用符でくくったのを連結するのがめんどいので、ヒアドキュメント型で書いています。
また、わかりやすく普通に書いていますけど、このコードも上記のカスタム投稿登録みたいに、オブジェクト型にして書くことができます(プロパティにセットして、インスタンス化しechoみたいな感じで)。
カスタムタクソノミ絞り込みあり/無し 表示例
では、さっそく表示確認をしてみましょう。まずはパラメータなしで一覧の固定ページにアクセスしてみます。
この状態では絞り込みがされず、全部の記事がでます。
『〇〇/cms/customarchive/?cat=men』にアクセスしたとき。麺類で絞り込みができてます。
『〇〇/cms/customarchive/?cat=don』にアクセスしたとき。どんぶり物がでてきました。
個別の投稿のテンプレートは、そのままテーマのsingle.phpを流用。重要ポイントですけど、カスタム投稿設定したばっかりでsingle.phpアクセスして404で記事が出ないみたいなことがあります。この場合は『パーマリンク設定→パーマリンク構造で、一回更新かけてやると、カスタム投稿にもパーマリンクが反映される』みたいな形で解決できることがあります。
あとがき・まとめ
- WordPressのカスタムタクソノミでも、$_GETパラメータで切り替えて絞り込みを行うことができる
- タクソノミのスラッグだけの配列作っておくと、判定がシンプルになった
- WP_queryに渡す変数にtax_queryそのまま渡すと階層が深くなるが、変数にして分離しておくとわかりやすいかも
まとめると、こんなところでしょうか。カスタムタクソノミ絞り込みといいつつ、WordPressのいろんなテクニックが満載になってしまった記事でした。
【カテゴリ】- WordPressファンクションetc
【タグ】- WordPress