ワイヤード・パンチ

WordPress、現在のページの投稿タイプが取得できないときの対処法。

WordPressの作業中、カスタム投稿タイプのタクソノミーのページを開いているときに、投稿タイプ取得の処理を使いたいときがありました。

しかし、定番の「get_query_var(“post_type”)」を実行しても、なぜか返ってくるのはNULL

それならばタクソノミースラッグから投稿タイプを割り出してやろうと、「get_query_var(“taxonomy”)」を実行するも、これも効かず…。

広告

今回の状況。

今回は、検索ボックスに入力した内容に応じて、記事の絞り込みを行いたかったので、「pre_get_posts」のフック内で、先程の関数を実行しようとしました

しかし、この中だとなぜかこれらが効かなかったのです。上記関数が有効になるタイミングよりも前に存在するフックってことでしょうか?

archive.phpなどのうえでは問題なかったので、やはり実行する場所に影響されるようです。

対処法。

$tax = get_queried_object();
$tax = $tax->taxonomy;
$post_type = get_taxonomy($tax)->object_type[0];

まず、get_queried_object()を実行して、様々な情報を取得します。

その中から、現在開かれているタクソノミーページのスラッグが入っているので、それだけを抽出。

そして、そのスラッグを元にタクソノミーの情報を取得して、その中からタクソノミーが属している投稿タイプを抜き出せばOK。というわけです。

場所によっては効かない恐れもあり、状況に応じて最初に書いた関数などと、投稿タイプの取得方法を使い分けるのが良いでしょう。