Paginacja typu niestandardowego posta WordPress
Ogólnie rzecz biorąc, za każdym razem, gdy pracuję z niestandardowym paginacją typu post, robię to, pisząc niestandardowe zapytanie za pomocą WP_Query, a następnie wywołując wp_reset_postdata() na końcu The Loop.
Nadal uważam, że to ma swoje miejsce, ale istnieje prostsze rozwiązanie, które możesz wdrożyć za pomocą konkretnego haka, który zapewnia WordPress.
W szczególności mówię o haczyku pre_get_posts. W Odniesieniu do kodu można zobaczyć, że jest to zdefiniowane jako:
Pożary po utworzeniu obiektu zmiennej zapytania, ale przed faktycznym uruchomieniem zapytania.
A ponieważ zapytanie zawiera dużo informacji, możemy śmiało użyć ich do określenia, czy chcemy zmodyfikować niezbędne argumenty, aby poradzić sobie z paginacją.
Rozumiem przez to, że musimy spojrzeć na właściwość post_type i wartość posts_per_page. W tym celu możesz zaimplementować go w następujący sposób :
<?php
use WP_Query;
add_action('pre_get_posts', __NAMESPACE__. 'customPostTypePagination');
/**
* If we're on the 'acme-post-type' page, then adjusts pagination so there are only two posts per page. This will
* affect pagination so we can use built-in pagination links to easily page through the content.
*
* @param WP_Query the instance of the query object that contains information to populate the template.
*
* @return WP_Query an unmodified version of the query object or a modified version if we're on the acme post-type.
*/
function customPostTypePagination(WP_Query $query)
{
if (isset($query->query['post_type']) && 'acme-post-type' == $query->query['post_type']) {
$query->set('posts_per_page', 2);
}
}
Powyższy kod nie jest zorientowany obiektowo (gdyby tak było, ustawiłbym subskrybenta i klasę odpowiedzialną za obsługę logiki w funkcji), ale możesz zobaczyć, jak to ustawić w najbardziej podstawowej formie.
Jeśli więc pracujesz z niestandardową paginacją typu postów i nie chcesz zajmować się różnymi aspektami konfigurowania niestandardowego zapytania, może to rozwiązać Twój problem.