Warum gibt `url_to_postid` beim Testen von ‘page_for_posts’ Seite 0 zurück?

Wenn ich page_for_posts > Posts-Seite (mit anderen Worten die Option page_for_posts ) auf eine statische Seite page_for_posts und dann versuche, die URL über url_to_postid() , wird 0 – warum?

Ich verstehe, dass es technisch nicht mehr eine statische / Post-Seite ist, aber ist die Post-Seite, aber diese Seite hat immer noch eine ID und ich muss immer noch darauf kommen. Lustig genug, ich muss die ID bekommen, um zu testen, ob es den gleichen Wert wie page_for_posts . Ich kann die 0 von der url_to_postid-function zurückgegeben wird, nicht verwenden, da 0 aus einer Anzahl von Gründen zurückgegeben werden kann.

Weiß jemand, wie ich die aktuelle URL testen kann, um ihre ID zu bekommen, wenn sie auf der page_for_posts Seite eingestellt ist?

Solutions Collecting From Web of "Warum gibt `url_to_postid` beim Testen von ‘page_for_posts’ Seite 0 zurück?"

Der Grund, warum Sie 0 zurückbekommen, ist der Test am Ende der function:

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

Die Posts-Seite besteht den is_singular Test nicht, daher wird 0 zurückgegeben.

Wenn Sie eine URL haben und wissen möchten, ob es sich um die Posts-Seite handelt, können Sie sie mit dem Permalink get_permalink , der von get_permalink wenn die Option 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!'; 

Werfen Sie einen Blick auf diese function, es könnte nützlich sein. WP-function get_page_by_path ()

Die Posts-Seite ist keine Seite . Legen Sie beispielsweise eine Seite mit einer Seitenvorlage als Ihre Posts-Seite fest und Sie erhalten die Seitenvorlage nicht. Stattdessen werden Sie wahrscheinlich archive.php oder index.php , da die Hauptschleife / Abfrage keine Seite lädt, sondern das primäre Postarchiv.

Daher dieser Code:

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

Auf der Posts-Seite ist is_singular falsch, weil es sich um eine Archivseite handelt, nicht um eine einzelne Post-Seite

Daher gibt es bei dieser URL keinen Post und daher ist 0 geeignet, da es sich um einen Fehlercode handelt, der keine Posts angibt.