WordPress:現在の投稿タイプをget_post_type()で取得できない場合の代替案

WordPress:現在の投稿タイプをget_post_type()で取得できない場合の代替案

WordPressで現在の投稿タイプを取得(確認)する際、ほとんどの場合はget_post_type()を使うことで取得することができますが、それでは取得できないという場合に使える方法の備忘録です。

現在どの投稿タイプが表示されているか取得したいとき、手っ取り早くできるものとして先述したようにget_post_type()を利用する方法があります。
get_post_type()はパラメータが未指定の場合は自動的に現在の投稿が対象となるので、調べたい箇所で記述すれば容易に投稿タイプを取得することができます。

PHP

$post_type = get_post_type();

// echo 'Post Type: ' . $post_type;

ただし、この方法は利用する条件によって注意点があり、Codexにもget_post_type( $post );と記載があるように取得する際に投稿の情報が必要となるので、投稿が存在するシングルページやアーカイブページなどでは取得できますが、投稿がない(非公開にしている・1件も投稿されていないなど)アーカイブやタクソノミーのアーカイブでは投稿タイプを取得することができません。

投稿がない状態でもこれらのページで投稿タイプを取得したい場合は、get_post_type()の代替案としてそれぞれ下記のような方法で取得することができます。

アーカイブの場合

アーカイブページで投稿の有無関係なく投稿タイプを取得したい場合は、下記のようにget_query_var()を利用してグローバル変数の$wp_queryからpost_typeの情報を取得することができます。

PHP

$post_type = get_query_var( 'post_type' );

// echo 'Post Type: ' . $post_type;

タクソノミーアーカイブの場合

タクソノミーのアーカイブページで投稿の有無関係なく投稿タイプを取得したい場合は、get_query_var()get_taxonomy()を利用します。
get_query_var()で取得したタクソノミーをget_taxonomy()に渡すことでそのタクソノミーのオブジェクトを取得できるので、あとはそのオブジェクト内から下記のような形で投稿タイプの情報を取得することができます。

PHP

$taxonomy = get_query_var( 'taxonomy' );
$post_type = get_taxonomy( $taxonomy )->object_type[0];

// echo 'Post Type: ' . $post_type;

Close the search window,
please press close button or esc key.