Reading Settings > Posts Page (つまり、page_for_posts
オプション)を静的ページに設定した後、url_to_postid()
を介してそのURLを渡そうとすると0
が返されます。
技術的には静的/投稿ページではなくなりましたが、投稿ページですが、そのページにはまだIDがあるので、それを取得する必要があります。それはがpage_for_posts
と同じ値であるかどうかをテストするためにIDを取得する必要があります。 url_to_postid関数から返された0
を使用することはできません。これは、さまざまな理由で0が返される可能性があるためです。
page_for_posts
ページに設定されている場合に、現在のURLをテストしてそのIDを取得する方法を誰かが知っていますか?
0が返されるのは、関数の最後にあるテストのためです。
if ( ! empty( $query->posts ) && $query->is_singular )
return $query->post->ID;
else
return 0;
投稿ページはis_singular
テストに合格しないため、0が返されます。
あなたがURLを持っていて、それが投稿ページであるかどうか知りたいならば、あなたはget_permalink
オプションを渡されたときにpage_for_posts
から返されたパーマリンクに対してそれを照合することができます:
$page_for_posts_url = get_permalink( get_option( 'page_for_posts' ) );
if( $current_url == $page_for_posts_url ) echo 'this is the page for posts!';
投稿ページはページではありません 。たとえば、ページテンプレートを含むページを投稿ページとして設定すると、そのページテンプレートは表示されません。代わりに、おそらくarchive.php
またはindex.php
が表示されます。メインループ/クエリではページが読み込まれず、プライマリ投稿アーカイブが読み込まれるためです。
したがって、このコード:
if ( ! empty( $query->posts ) && $query->is_singular )
return $query->post->ID;
else
return 0;
投稿ページにある場合、is_singular
はfalseです。なぜなら、それは単一の投稿ページではなくアーカイブページだからです。
したがって、そのURLには投稿がなく、0
が適切です。投稿がないことを示すエラーコードだからです。
この機能を見てください、それは便利かもしれません。 WP関数get_page_by_path()