pre get posts – Paginacja nie działa po stronie 3 na stronie archiwum kategorii
Mam niestandardowy typ postu „pokaż” iw ramach tego niestandardowego typu postu skonfigurowałem taksonomię/kategorię o nazwie „miejsce”, która ma dwie opcje „miejsce-jeden” i „miejsce-dwa” (ślimaki). Na dwóch skonfigurowanych przeze mnie stronach archiwum, z których każda pokazuje wszystkie posty z „miejsca-pierwszego” lub „miejsca-dwa”, paginacja nie działa poza stroną 3. Używam numerowanej paginacji i wizualnie wyświetla poprawny numer stron powinno być (biorąc pod uwagę to, co ustawiłem posty na stronę), jednak jeśli klikniesz coś powyżej „3”, otrzymuję 404.
Co próbowałem i nie zadziałało:
- resetowanie linków bezpośrednich
- zmiana maksymalnej liczby postów na stronę bezpośrednio przez pulpit nawigacyjny wp
- pozbycie się mojego niestandardowego zapytania i użycie pre_get_posts (uwaga: wszystkie moje badania wskazują na to, że jest to ścieżka do rozwiązania mojego problemu, więc zakładam, że może zadziałać i po prostu nieprawidłowo koduję funkcję w functions.php lub w inny sposób). Jeśli użycie pre_get_posts w functions.php jest rzeczywiście rozwiązaniem, czy muszę dodawać coś nowego do moich plików szablonów problematycznych stron archiwum, poza standardową pętlą wp? (i oczywiście pozbycie się niestandardowego zapytania).
Powtarzam, wszystko działa idealnie, z wyjątkiem faktu, że paginacja po stronie 3 daje 404.
Ostatnia uwaga, paginacja działa doskonale na stronie archiwum dla tego niestandardowego postu jako całości. Problem występuje tylko na stronach archiwum dla „miejsca-1” i „miejsca-dwa”.
WP_Query
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$today = current_time('Ymd');
$args = array (
'post_type' => 'show',
'posts_per_page' => 3,
'paged' => $paged,
'meta_key' => 'show_date',
'order' => 'ASC',
'orderby' => 'meta_value',
'tax_query' => array(
array(
'taxonomy' => 'venue',
'field' => 'slug',
'terms' => 'venue-one'
)
),
'meta_query' => array(
array(
'key' => 'show_date',
'compare' => '>=',
'value' => $today
),
),
);
$the_query = new WP_Query($args);
?>
Pętla
<?php if ($the_query->have_posts() ): while ($the_query->have_posts() ) :$the_query->the_post(); $fields = (object) get_fields(); ?>
Funkcja paginacji (w functions.php)
function pagination_bar_venue( $custom_query ) {
$total_pages = $custom_query->max_num_pages;
$big = 999999999; // need an unlikely integer
if ($total_pages > 1){
$current_page = max(1, get_query_var('paged'));
echo paginate_links(array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => $current_page,
'total' => $total_pages,
));
}
}
Wywołanie paginacji w szablonie
<div class="pagination-shows">
<?php pagination_bar_venue($the_query); ?>
</div>
EDIT + KILKA DOBRYCH WIADOMOŚCI
Wszystko działa z poniższą funkcją pre_get_posts, ale… linki do paginacji nie pojawiają się teraz pod postami. Żeby było jasne, poniższy kod zadziałał i teraz mogę zobaczyć posty poza stroną 3 (aż do dowolnej strony, na której znajdują się posty, wszystko działa idealnie, jeśli wpiszę adres URL). Jednak po wdrożeniu linki do fizycznego kliknięcia numerów stron zniknęły. Jak mogę przekazać zmienną $ paged poniżej, aby wyświetlała się kopia zapasowa? czy jest inny problem?
// get taxonomy posts
function get_tax_posts( $query ) {
// Make sure this only fires when we want it too
if( !is_admin() && $query->is_main_query() && $query->is_tax('venue')) {
// If so, modify the order variables
$query->set('post_type', 'show' );
$query->set('posts_per_page', '3' );
$query->set( 'meta_key', 'show_date' );
$query->set( 'order', 'ASC' );
$query->set( 'orderby', 'meta_value' );
$meta_query[] = array(
array(
'key' => 'show_date',
'value' => current_time('Ymd'),
'compare' => '>=',
),
);
$query->set('meta_query',array( $meta_query ) );
$taxquery = array(
array(
'taxonomy' => 'venue',
'field' => 'slug',
'terms' => 'venue-one',
)
);
$query->set( 'tax_query', $taxquery );
}
}
add_action('pre_get_posts', 'get_tax_posts', 9999);
Ok, teraz paginacja została naprawiona, ale zauważyłem inny problem. Jeśli chodzi o paginację, wymieniłem poniżej:
<?php pagination_bar_venue($the_query);?>
Z:
<?php the_posts_pagination();?>
a teraz działa również paginacja.
Wydaje mi się, że nowy problem, który się dzieje, opiera się na priorytecie haka. Jak wspomniano powyżej, mam (2) taksonomie, aby to aktywować, więc zrobiłem 2 oddzielne funkcje w funkcjach php, jedną dla miejsca-1 (kod powyżej), a następnie drugą dla miejsca-dwa (oczywiście z inną nazwą funkcji). Wygląda na to, że nie możesz mieć obu działających. Jedynym, który zadziała, jest ten z wyższym numerem priorytetu haka. Czy jest na to poprawka? Dzięki
EDYCJA – Myślę, że problem polegał na tym, że moje nazwy funkcji były zbyt podobne, nie były dokładne, ale bliskie poza kilkoma literami. Zmieniłem je tak, by nie były do siebie podobne i teraz wydaje się, że wszystko działa!