So ändern Sie die WP-Abfrage so, dass der erste aktuelle Post zum Anpassen des Inhalts ausgewählt wird

Ich arbeite mit einer function, um die 3 letzten Beiträge aus der Kategorie “Nachrichten” zu erhalten

add_shortcode( 'show_news', 'news_query' ); function news_query() { $args = array( 'posts_per_page' => 3, 'category_name' => 'news', ); $news_query = new WP_Query( $args ); if ( $news_query->have_posts() ) : $html_out = '
'; while ( $news_query->have_posts() ) : $news_query->the_post(); // Do stuff with each post here $html_out .= '
' . Date('m/y') . '
'; endwhile; $html_out .= '
'; else : // No results echo "Nothing to show"; endif; wp_reset_query(); return $html_out; }

Aber ich muss den letzten Beitrag zielen und es mit einer class versehen, damit ich es anders the_excerpt(); kann und add the_excerpt(); dazu auch.

Müsste ich etwas mit der Zählung tun, um es anzugreifen? So stelle ich mir das vor:

news_item = title + excerpt (das neueste Element und wird class = “foo” haben) news_item = title news_item = title

Solutions Collecting From Web of "So ändern Sie die WP-Abfrage so, dass der erste aktuelle Post zum Anpassen des Inhalts ausgewählt wird"

Sie brauchen wp_reset_query () nicht, verwenden Sie stattdessen wp_reset_postdata (), da es sich um eine sekundäre Abfrage handelt und Sie nicht auf die ursprüngliche Hauptabfrage zurücksetzen müssen.

Niemals echo im shortcode verwenden, Zeile ersetzen:

 echo "Nothing to show"; 

mit:

 $html_out = "Nothing to show"; 

Um zu bekommen, was Sie wollen, können Sie verwenden:

 global $wp_query; $wp_query->current_post 

Es gibt Ihnen die aktuelle Position des Post-in-Loop. Seien Sie vorsichtig, die erste Postposition ist 0 nicht 1. Sie können also Folgendes tun:

 if ( 0 === $wp_query->current_post ) { /*some code*/ } else { /* some code */ }