web-dev-qa-db-ja.com

`page_for_posts`ページをテストするとなぜ` url_to_postid`が返るのですか?

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を取得する方法を誰かが知っていますか?

2
Jody Heavener

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!';
2
Milo

投稿ページはページではありません 。たとえば、ページテンプレートを含むページを投稿ページとして設定すると、そのページテンプレートは表示されません。代わりに、おそらくarchive.phpまたはindex.phpが表示されます。メインループ/クエリではページが読み込まれず、プライマリ投稿アーカイブが読み込まれるためです。

したがって、このコード:

if ( ! empty( $query->posts ) && $query->is_singular )
    return $query->post->ID;
else
    return 0;

投稿ページにある場合、is_singularはfalseです。なぜなら、それは単一の投稿ページではなくアーカイブページだからです。

したがって、そのURLには投稿がなく、0が適切です。投稿がないことを示すエラーコードだからです。

0
Tom J Nowell

この機能を見てください、それは便利かもしれません。 WP関数get_page_by_path()

0
Arnis