WordPressでpost_type
を取得する場合 通常 get_post_type()
を使うのですが、投稿が無い時(0件の時) get_post_type()
は false
を返すため今のページのpost_type
を取得できない場合があります。(カスタム投稿タイプを作って投稿が0件のアーカイブページとか)
Source File: wp-includes/post.php
<?php function get_post_type( $post = null ) { if ( $post = get_post( $post ) ) return $post->post_type; return false; }
引用元: get_post_type() | Function | WordPress Developer Resources
これは投稿がないとglobal $post
がNULLなためget_post( $post )
が見つからないのでfalse
が返る仕様になっているようです。
get_query_var() を使う
get_query_var( 'post_type' )
を使うと、投稿が0件で $post が NULL の時でも、そのページのpost_type
を取得することができます。
<?php $post_type = get_query_var( 'post_type' ); echo $post_type;
カスタム投稿タイプなど投稿が0件でもアーカイブページを表示したり、グローバルナビゲーションなどでpost_type
が必要になる場合はこちらを使うのが良いのではないかと思います。
投稿の一覧ページ( is_home()
)の問題
WordPress管理画面の設定 表示設定 > フロントページの表示
で指定できる投稿の一覧ページでは、
投稿が1件以上ある場合でもglobal変数の$wp_query
にはpost_type
が設定されていないので get_query_var( 'post_type' )
でpost_type
を取得することはできませんでした。
投稿がある場合は get_post_type()
で取得することが出来るのですが、
投稿が0件の時はget_query_var( 'post_type' )
でも get_post_type()
でも post_type
を取得することができません。
投稿のpost_typeのデフォルトがpost
なので、is_home() && !get_post_type()
の時はデフォルト値としてpost
をハードコーディングで当てるしかなさそうです。
追記
カテゴリー・タクソノミーのアーカイブでは投稿があっても、query_varにpost_typeはセットされていないようで、
get_query_var( 'post_type' )
は 常に NULL になっていました。
taxonomyオブジェクトを取得して taxonomy_obj-> object_type[0]
とすれば、post_type
が取得できるようです。
カテゴリーの場合は get_taxonomy('category')
で、カスタムタクソノミーはget_query_var('taxonomy')
でタクソノミー名を取得してget_taxonomy('タクソノミー名')
とすれば taxonomyオブジェクト が取得できます。
EX: post_type を取得する関数
アーカイブページ・シングルページなどで分けてpost_type
を返す関数を作成してみました
<?php function get_current_post_type() { $post_type = get_post_type(); if( empty($post_type) ) { // 投稿が 0 件の時 if( is_category() ) { $tax = get_taxonomy('category'); $post_type = $tax->object_type[0]; } else if( is_tax() ) { // category, taxonomy get_query_var( 'post_type' ) は常に null // 投稿が 1件 でもあれば get_post_type() で取得可能 $term = get_query_var('taxonomy'); $tax = get_taxonomy( $term ); $post_type = $tax->object_type[0]; } else if( is_archive() ) { // 投稿が 0 件の時 get_post_type() は false を返すので get_query_var() で取得する $post_type = get_query_var( 'post_type' ); } else if( is_home() ) { // 投稿の一覧で投稿が0件の時は 'post' を設定 $post_type = 'post'; } } return $post_type; }
はてなblogさん。。。
マークダウンで引用内にコードブロック出力するにはどうしたら良いのですか???エンジニア系のblogだと結構必要じゃない?
[参考]
- get_post_type() | Function | WordPress Developer Resources
- get_query_var() | Function | WordPress Developer Resources
- WordPressのカスタム投稿タイプを取得するいくつかの方法 - うつつのがれ

ゼロから始める魔法の書(VI) 獣と魔女の結婚ごっこ (電撃コミックスNEXT)
- 作者: いわさきたかし
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2017/06/27
- メディア: Kindle版
- この商品を含むブログを見る