More than 1 year has passed since last update.

カスタム投稿アーカイブで、get_post_type()を使っても・・・

記事ループ外でget_post_type()したら、(bool) falseが返ってきて、投稿タイプが取得できない・・・。

調べてみた

Function Reference/get post type « WordPress Codex http://codex.wordpress.org/Function_Reference/get_post_type

Display the post type. This example needs to be inside the loop.

post.php in tags/3.9.1/src/wp-includes – WordPress Trac https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/post.php#L1057

1058 if ( $post = get_post( $post ) )

(get_post_type() returns nothing on custom post type archive pages with custom query and no results) – WordPress Trac https://core.trac.wordpress.org/ticket/20647

Here's what the docs say: @uses $post The Loop current post global

投稿が0件なアーカイブでは、global $postNULLなので、
get_post()の投稿情報が見つからない場合の返り値NULLが返ってきていたのであった。

結局どうするの?

get_query_var( 'post_type' )を使う
(他global $post_typeglobal $wp_query->query->post_typeget_queried_object()など・・・)

アーカイブページの記事ループ外でも、通常の記事ループ内でもpost_typeを取得できるようにした関数

function get_post_type_query() {
    if ( is_archive() ) {
      return get_query_var( 'post_type' );
    }

    return get_post_type();
  }