Es begann damit, dass auf der Blogstartseite die oben gehaltenen Beiträge zusätzlich angezeigt wurden, sodass die gewählte Anzahl von Beiträgen pro Seite überschritten wurde. Außerdem waren die hervorgehobenen Beiträge nicht als solche erkennbar.
Die hervorgehobenen Beiträge sollten sich nicht nur von den anderen abheben, sondern auch sichtbar sein, wenn man im Blog weiterblätterte. Also machte ich aus dem vorherigen Standard-Loop einen Custom Loop, und schloss sticky posts aus. In einem zweiten Query darüber kamen nur sticky posts in einem anderen Design, um sich, wie gewünscht, von den anderen abzuheben. Doch auf Seite zwei gab es dann keine Sticky Posts mehr zu sehen.
Mit pre_get_posts ging auch nichts, da man mit diesem Hook nur den main_query modifizieren kann. Macht man einen Query zum Main Query, kann man sich hingegen die Eintellungen nicht aussuchen. Ein Main Query über dem Custom Query blieb allerdings stehen, auch wenn man blätterte. Das war ein Ansatz.
Ein Abfrageblock wird zum Main Query, indem man „Abfrage vom Template übernehmen“ aktiviert (lässt). Um nicht oben zu haltende Beiträge auf den Blogseiten aus dem Main Query auszuschließen, kam pre_get_posts zur Anwendung.
function show_sticky_posts_on_all_blog_pages( $query ) {
if ( $query->is_main_query() && !is_admin() && is_home() ) {
$sticky_posts = get_option( 'sticky_posts' );
$query->set( 'post__in', $sticky_posts );
}
}
add_action( 'pre_get_posts', 'show_sticky_posts_on_all_blog_pages' );
Der modifizierte Loop, der nur Beiträge anzeigt die nicht sticky sind, bleibt davon unberührt, da es sich dabei ja nicht um den Main-, sondern ein Custom Query handelt.
Hinweis: Das Beispiel bezieht sich auf ein Projekt mit Block Theme und Full Site Editing.
Schreibe einen Kommentar