Sticky Post in Seiten-Posts einbeziehen

Ich möchte 7 Beiträge auf meiner Homepage zeigen. Ich möchte in der Lage sein, diese Beiträge manuell zu wählen, indem ich sie klebe.

Derzeit habe ich meine Beiträge pro Seite in WP Admin auf ‘7’ gesetzt. Dies beinhaltet jedoch keine “Haftnotizen”, da ich jetzt 7 Haftnotizen und 7 neueste veröffentlichte Beiträge mit insgesamt 14 Treffern habe .

Wie schließe ich die Haftnotizen in die Anzahl der Beiträge pro Seite ein?

Solutions Collecting From Web of "Sticky Post in Seiten-Posts einbeziehen"

Dies ist machbar, und wie ich in einem Kommentar gesagt habe, müssen Sie die folgenden Schritte ausführen

  • Zählen Sie die Anzahl der Haftnotizen. Dies kann durch einfaches Zählen von get_option( 'sticky_posts' ) das die IDs der klebrigen Posts in Form eines Arrays enthält

  • Sie müssten auch die Anzahl der Beiträge pro Seite erhalten. Du willst hier nicht hart codieren. Die Anzahl der Posts pro Seite ist in get_option( 'posts_per_page' ) gespeichert, also werden Sie diese verwenden

  • Der wichtige Teil besteht jetzt darin, Offsets zu verwenden, um die Anzahl der Posts neu zu berechnen, die auf der ersten Seite der Hauptabfrage angezeigt werden. Laut Beispiel im OP, wenn Posts pro Seite auf 7 gesetzt sind und es 4 sticky-Posts gibt, wollen wir nur drei Posts aus der Hauptabfrage, und nicht die sieben, die als Standard der Site gesetzt sind. Ab Seite 2 werden wir noch die normalen 7 Posts benötigen, um sie von der Hauptabfrage zu zeigen, da wir hier keine Posts haben

  • Dieser Offset $max_num_pages sich jedoch auf die Berechnung der Eigenschaft $max_num_pages in der Hauptabfrage aus, und das bedeutet, dass in den meisten Fällen die letzte Seite fehlt. Um dies zu korrigieren, müssen wir die Anzahl der gefundenen Posts anpassen, indem wir im Grunde unseren Offset zur tatsächlichen Anzahl der gefundenen Posts addieren, um die Anzahl der Seiten zu korrigieren. Dies wird über den Filter found_posts geschehen

( HINWEIS: Dieser Code ist jetzt getestet und funktioniert )

Hier ist die Grundidee im Code:

 add_action( 'pre_get_posts', function ( $q ) { if ( $q->is_main_query() && $q->is_home() ) { $count_stickies = count( get_option( 'sticky_posts' ) ); $ppp = get_option( 'posts_per_page' ); $offset = ( $count_stickies < = $ppp ) ? ( $ppp - ( $ppp - $count_stickies ) ) : $ppp; if (!$q->is_paged()) { $q->set('posts_per_page', ( $ppp - $offset )); } else { $offset = ( ($q->query_vars['paged']-1) * $ppp ) - $offset; $q->set('posts_per_page',$ppp); $q->set('offset',$offset); } } }); add_filter( 'found_posts', function ( $found_posts, $q ) { if( $q->is_main_query() && $q->is_home() ) { $count_stickies = count( get_option( 'sticky_posts' ) ); $ppp = get_option( 'posts_per_page' ); $offset = ( $count_stickies < = $ppp ) ? ( $ppp - ( $ppp - $count_stickies ) ) : $ppp; $found_posts = $found_posts + $offset; } return $found_posts; }, 10, 2 );