Muszę mieć inną liczbę postów na stronie na pierwszej stronie niż na innych stronach.
Na przykład tego potrzebuję
- Wszystkich postów: 6
- Pierwsza strona: pokazano 3 posty
- Następująca strona: pokazano 2 posty na stronie
Oto mój kod:
$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();
Na pierwszej stronie w archiwum kod zakłada:
Cóż, łącznie 6 postów i 3 posty na stronie. Potrzebuję więc 2 stron archiwum, a stronicowanie, które wam przedstawiam, to:
[1] [2]
Jednak każda inna strona w archiwum kodu zakłada:
Łącznie 6 postów i 2 posty na stronie. Potrzebuję więc 3 stron archiwum, a stronicowanie, które wam przedstawiam, to:
[1] [2] [3]
Potrzebujesz pomocy, aby to naprawić.
custom-post-types
loop
pagination
norixxx
źródło
źródło
'caller_ get_ posts'
zawiera spacje i jest niepoprawny. Po drugie, jest przestarzałe. Użyjignore_sticky_posts
zamiast tego.Odpowiedzi:
EDYCJA - ODPOWIEDŹ ZMIENIONA
Pracuję nad innym rozwiązaniem, które w rzeczywistości jest lepszą oryginalną odpowiedzią. Nie wiąże się to z żadnym niestandardowym zapytaniem i myślę, że do wszystkich celów moja oryginalna odpowiedź może zostać usunięta, ale zachowana w celach informacyjnych
Nadal uważam, że jesteś na stronie głównej i tak też to potraktuje. To jest moje nowe rozwiązanie
KROK 1
Usuń niestandardowe zapytanie ze strony głównej i zastąp je domyślną pętlą
KROK 2
Służy
pre_get_posts
do zmiany głównego zapytania, aby dodać niestandardową taksonomię do głównego zapytania wyświetlanego na stronie głównej.KROK 3
Teraz pobierz
posts_per_page
zestaw opcji z zaplecza (który, jak zakładam, wynosi 2), a także ustaw swój,offset
którego będziemy używać. Tak będzie,1
ponieważ będziesz potrzebował 3 postów na pierwszej stronie i 2 na pozostałychKROK 4
Na pierwszej stronie musisz dodać,
offset
abyposts_per_page
dodać maksymalnie 3, aby uzyskać trzy posty na pierwszej stronie.KROK 5
Musisz zastosować swoje
offset
na wszystkich kolejnych stronach, w przeciwnym razie otrzymasz powtórzenie ostatniego postu strony na następnej stronieKROK 6
Na koniec musisz odjąć swoje przesunięcie od, w
found_posts
przeciwnym razie twoje paginacja na ostatniej stronie będzie błędna i da ci404
błąd, ponieważ ostatni post zostanie pominięty z powodu nieprawidłowej liczby postówUWAGA: ten fragment kodu złamał podział na strony na stronie wyszukiwania. Jest to teraz naprawione, zobacz zaktualizowany kod
WSZYSCY RAZEM
Tak będzie wyglądać twoje pełne zapytanie, które powinno przejść do functions.php
źródło
Wiem, że pochodzi to z 1000 lat temu, ale inne rozwiązanie dla każdego, kto szuka tego rozwiązania podczas korzystania z niestandardowego zapytania, oto jak to zrobić. W tym przykładzie pierwsza strona potrzebowała 10 postów, a każda następna strona potrzebuje 9.
a następnie w tablicy użyj tego:
Teraz możesz już iść.
źródło