Ausschließen der ersten ‘n’ Anzahl von Posts eines Tags von der Homepage?

Anwendungsfall (Beispiel): Mit einer separaten, benutzerdefinierten Abfrage zeigt die Startseite meiner Website 5 gekennzeichnete Beiträge mit der Überschrift “Highlights (Highlights)” gefolgt von den neuesten Posts aus der Hauptabfrage.

Ich möchte nicht, dass die 5 hervorgehobenen Posts, dh die ersten 5 Posts, die mit ‘highlights’ markiert sind, unter den neuesten Posts erscheinen.

Um es anders auszudrücken, die neuesten Posts sollten alle neusten Posts enthalten, aber wenn es einen Post mit ‘highlights’ markiert und zu den ersten 5 gehört, sollte dies ausgeschlossen werden.

All dies, ohne die Paginierung zu unterbrechen.

Wie mache ich das?


Ich habe eine schwache Idee, wie ich das machen kann:

function itsme_filtered_latest_posts( $query ) { if( $query->is_home() && $query->is_main_query() ) { $query->set( ... ); $query->set( 'offset', ... ); } } add_action( 'pre_get_posts', 'itsme_filtered_latest_posts' ); 

Wie gesagt, ich habe nur eine schwache Idee, die so gut ist wie keine.

Solutions Collecting From Web of "Ausschließen der ersten ‘n’ Anzahl von Posts eines Tags von der Homepage?"

A in Ihrem Beispiel haben Sie Zugriff auf alle WP_Query Object query_vars (siehe [hier]) 1 , Sie könnten die post__not_in Query_var in Ihrer Abfrage verwenden. Es benötigt ein Array von IDs als Parameter. Also fragen Sie zuerst nach Ihren Posts, die mit ‘markiert’ markiert sind. Während sie angezeigt werden, würden Sie alle ihre IDs zu einem Array wie folgt hinzufügen

 < ?php $do_not_duplicate = array(); // set befor loop variable as an array while ( have_posts() ) : the_post(); $do_not_duplicate[] = $post->ID; // remember ID's of 'highlighted' posts //display posts endwhile; ?> 

dann triffst du eine andere Anfrage auf.

 < ?php // another loop without duplicates query_posts( array( 'post__not_in' => $do_not_duplicate ) ); while ( have_posts() ) : the_post(); // display your posts without the highlighted endwhile; ?> 

Tun Sie etwas wie folgt:

 function get_custom_posts_wpse_124312() { static $post_qry; if (!empty($post_qry)) { return $post_qry; } else { $post_qry = new WP_Query(array('post_type'=>'post','posts_per_page'=>2)); // whatever arguments you need } return $post_qry; } function filter_featured_special_wpse_124312($qry) { if ($qry->is_main_query()) { // whatever conditions you need remove_action('pre_get_posts','filter_featured_special_wpse_124312'); $fs = get_custom_posts_wpse_124312(); if (!empty($fs)) { $ids = wp_list_pluck($fs->posts,'ID'); $qry->set('posts__not_in',$ids); } } } add_action('pre_get_posts','filter_featured_special_wpse_124312'); 

Die get_custom_posts_wpse_124312() sollte Ihre “5 vorgestellten Beiträge, markierte ‘Highlights (highlights)'” mit den Argumenten, die Sie dafür benötigen, abrufen. Ich nehme eine tax_query ? Sie verwenden diese Daten dann, um die von Ihrer Hauptabfrage zurückgegebenen Posts auszuschließen. Sie können dann get_custom_posts() in Ihrer Vorlage verwenden, um das get_custom_posts() zur Anzeige abzurufen. Sie müssen dafür in der Vorlagendatei eine Schleife erstellen. Da $post_qry statisch ist, sollte die “featured” $post_qry nur einmal ausgeführt werden.