Das bedingte Is_single () -Tag gibt in der Abfrage null zurück

Ich versuche herauszufinden, warum das bei mir nicht funktioniert. Ich versuche einfach, eine Schleife aller Beiträge und Seiten zu erstellen und sie als Post und Seite in einem Array zu markieren. Aber die Bedingung is_single() funktioniert nicht, alle Beiträge erscheinen als Seiten. Und wenn ich die is_page() entferne, is_page() es mir einfach null

 $data = array(); $args = array( 'posts_per_page' => '-1', 'post_type' => array('post', 'page'), 'orderby' => 'menu_order', 'order' => 'ASC', ); $loop = new WP_Query($args); if( $loop->have_posts() ): while( $loop->have_posts() ): $loop->the_post(); $id = $loop->post->ID; if(is_single()) { $type = 'article'; } elseif(is_page()) { $type = 'page'; } $data[$id] = array( 'uri' => $loop->post->post_name, 'title' => apply_filters( 'the_title', $loop->post->post_title ), 'type' => $type, 'entry' => apply_filters( 'the_content', $loop->post->post_content ), ); endwhile; endif; wp_reset_postdata(); 

Solutions Collecting From Web of "Das bedingte Is_single () -Tag gibt in der Abfrage null zurück"

is_single() und is_page() beziehen sich auf die Hauptabfrage und werden, soweit ich weiß, nicht geändert, um den einzelnen Posts in einem Loop zu entsprechen. Sie beziehen sich auf den Typ der Seite nicht auf die einzelnen Beiträge. Versuch es und du solltest sehen was ich meine:

 $data = array(); $args = array( 'posts_per_page' => '-1', 'post_type' => array('post', 'page'), 'orderby' => 'menu_order', 'order' => 'ASC', ); $loop = new WP_Query($args); if( $loop->have_posts() ): while( $loop->have_posts() ): $loop->the_post(); $id = $post->ID; the_title(); var_dump($post->post_type,is_single(),is_page(),$loop->is_single(),$loop->is_page()); echo '
'; endwhile; endif; wp_reset_postdata();

Die einfache Lösung ist nur, den Post-Typ selbst zu überprüfen

 if('post' == $post->post_type) { $type = 'article'; } elseif('page' == $post->post_type) { $type = 'page'; } 

Auch das,

 $id = $loop->post->ID; 

ist zu kompliziert. $post->ID ist der gleiche Wert. Oder benutze get_theID()

is_single() und is_page() arbeiten mit der globalen $wp_query und funktionieren in diesem Kontext nicht. Wenn Sie versuchen, den Post-Typ zu ermitteln, überprüfen Sie den Wert von $post->post_type

 if( 'post' == $post->post_type ) { $type = 'article'; } elseif( 'page' == $post->post_type ) { $type = 'page'; } 

Sie können is_single erzwingen, wenn Sie die Hauptabfrage ersetzen:

 $draft_post_query = new WP_query(array( 'post_status' => 'draft', 'post_type' => array('post'), 'post__in' => array($post_id) )); $draft_post = $draft_post_query->post; global $wp_query, $post; $wp_query = $draft_post_query; $post = $draft_post; $wp_query->is_single = true; $wp_query->is_singular = true;