Sticky posts auf allen Blogseiten oben anzeigen

804 2568 2
Foto von Gabriele Lässer

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.

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable