WordPress

カスタム投稿アーカイブと、get_post_type()

More than 3 years have 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();
}