it-swarm.com.de

Sticky Post in Anzahl der Seitenbeiträge einbeziehen?

Ich möchte 7 Beiträge auf meiner Homepage sehen. Ich möchte in der Lage sein, diese Beiträge manuell auszuwählen, indem ich sie anhefte.

Momentan habe ich meine Beiträge pro Seite in WP Admin auf '7' gesetzt. Dies schließt jedoch keine klebrigen Beiträge ein, da ich derzeit 7 klebrige Beiträge + 7 neueste veröffentlichte Beiträge habe, die für insgesamt 14 angezeigt werden.

Wie beziehe ich die Sticky-Posts in die Anzahl der Posts pro Seite ein?

2
Travis Patron

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

  • Holen Sie sich eine Zählung der Anzahl der klebrigen Beiträge. Dies kann durch einfaches Zählen von get_option( 'sticky_posts' ) erreicht werden, die die IDs der Haftnotizen in Form eines Arrays enthält

  • Sie müssten auch die Anzahl der Beiträge pro Seite abrufen. Sie möchten hier nicht hart codieren. Die Anzahl der Beiträge pro Seite ist in get_option( 'posts_per_page' ) gespeichert, daher werden Sie diese verwenden

  • Der wichtige Teil ist nun, Offsets zu verwenden, um die Anzahl der Posts neu zu berechnen, die auf Seite 1 der Hauptabfrage angezeigt werden sollen. Wenn die Anzahl der Posts pro Seite im OP auf 7 festgelegt ist und es 4 Sticky-Posts gibt, möchten wir nur drei Posts aus der Hauptabfrage und nicht die sieben als Standard-Posts für die Site festlegen. Ab Seite 2 benötigen wir noch die normalen 7 Posts, die in der Hauptabfrage angezeigt werden, da wir hier keine klebrigen Posts haben werden

  • Dieser Versatz beeinflusst jedoch die Berechnung der Eigenschaft $max_num_pages in der Hauptabfrage. In den meisten Fällen fehlt die letzte Seite. Um dies zu korrigieren, müssen wir die Anzahl der gefundenen Beiträge anpassen, indem wir unseren Versatz zur tatsächlichen Anzahl der gefundenen Beiträge addieren, um die Anzahl der Seiten zu korrigieren. Dies erfolgt über den Filter found_posts

( 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 );     
5
Pieter Goosen