Ich muss auf der ersten Seite eine andere Anzahl von Posts pro Seite haben als auf den anderen Seiten.
Zum Beispiel ist es das, was ich brauche
- Beiträge insgesamt: 6
- Erste Seite: zeigt 3 Beiträge
- Folgende Seite: zeigt 2 Beiträge pro Seite
Hier ist mein Code:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$fp_limit = 3; // first page limit
$limit = 2; // following page limit
$offset = 0; // default offset
if( $paged == 1 ) {
$limit = $fp_limit;
} else {
$offset = $fp_limit + ( ($paged - 2) * $limit );
}
$args = array(
'post_type' => 'my_post_type',
'post_status' => 'publish',
'offset' => $offset,
'posts_per_page' => $limit,
'caller_ get_ posts' => -1, // remove sticky post
'paged' => $paged,
'tax_query' => array(
array(
'taxonomy' => 'my_taxo',
'field' => 'slug',
'terms' => array('slug1', 'slug2', 'slug3')
)
)
);
$my_query = null;
$my_query = new WP_Query($args);
// basic loop
if( $my_query->have_posts() ) :
while ($my_query->have_posts()) : $my_query->the_post();
...
endwhile; endif; // archive loop
if (function_exists('wp_pagenavi')){ wp_pagenavi( array( 'query' => $my_query ) ); }
wp_reset_query();
Auf der ersten Seite des Archivs setzt dieser Code Folgendes voraus:
Nun, insgesamt 6 Beiträge und 3 Beiträge pro Seite. Ich brauche also 2 Archivseiten und die Paginierung, die ich Ihnen präsentiere, ist:
[1] [2]
Bei jeder anderen Seite im Archiv geht der Code jedoch davon aus:
Nun, insgesamt 6 Beiträge und 2 Beiträge pro Seite. Ich brauche also 3 Archivseiten und die Paginierung, die ich Ihnen präsentiere, ist:
[1] [2] [3]
Benötigen Sie ein wenig Hilfe, um dies zu beheben.
custom-post-types
loop
pagination
norixxx
quelle
quelle
'caller_ get_ posts'
enthält Leerzeichen und ist nicht gültig. Zweitens ist es veraltet. Verwenden Sieignore_sticky_posts
stattdessen.Antworten:
BEARBEITEN - ANTWORT ÜBERARBEITET
Ich arbeite an einer anderen Lösung, die eigentlich besser ist als die ursprüngliche Antwort. Dies beinhaltet keine benutzerdefinierte Abfrage und ich denke, dass meine ursprüngliche Antwort für alle Zwecke gelöscht, aber zu Informationszwecken aufbewahrt werden kann
Ich glaube immer noch, dass Sie auf der Homepage sind und dies auch als solche behandeln werden. Das ist also meine neue Lösung
SCHRITT 1
Entfernen Sie die benutzerdefinierte Abfrage von der Startseite und ersetzen Sie sie durch die Standardschleife
SCHRITT 2
Verwenden Sie
pre_get_posts
diese Option, um die Hauptabfrage zu ändern und Ihre benutzerdefinierte Taxonomie zur Hauptabfrage hinzuzufügen, die auf der Startseite angezeigt werden soll.SCHRITT 3
Holen Sie sich jetzt den
posts_per_page
Optionssatz vom Backend (von dem ich annehme, dass er 2 ist) und legen Sie auch Ihren fest,offset
den wir verwenden werden. Das wird sein,1
da Sie 3 Beiträge auf Seite eins und 2 auf dem Rest benötigenSCHRITT 4
Auf Seite eins müssen Sie das hinzufügen
offset
,posts_per_page
um bis zu 3 zu addieren, damit Ihre drei Beiträge auf Seite eins angezeigt werden.SCHRITT 5
Sie müssen Ihre
offset
auf alle nachfolgenden Seiten anwenden , andernfalls erhalten Sie eine Wiederholung des letzten Beitrags der Seite auf der nächsten SeiteSCHRITT 6
Zuletzt müssen Sie Ihren Offset von dem subtrahieren, da
found_posts
sonst Ihre Paginierung auf der letzten Seite falsch ist und Sie einen404
Fehler erhalten, da der letzte Beitrag aufgrund der falschen Anzahl der Beiträge fehltHINWEIS: Dieser Code hat die Paginierung auf der Suchseite unterbrochen. Dies ist jetzt behoben, siehe den aktualisierten Code
ALLE ZUSAMMEN
So sieht Ihre vollständige Abfrage in der Datei functions.php aus
quelle
Ich weiß, dass dies von vor 1000 Jahren ist, aber eine andere Lösung für alle anderen, die nach dieser Lösung suchen, während sie eine benutzerdefinierte Abfrage verwenden, ist hier, wie es geht. In diesem Beispiel benötigte die 1. Seite 10 Beiträge und jede nachfolgende Seite 9.
und dann im Array Folgendes verwenden:
Jetzt können Sie loslegen.
quelle