Разбивка на страницы пользовательского типа записей WordPress
Вообще говоря, всякий раз, когда я работаю с пагинацией пользовательских типов сообщений, это делается путем написания пользовательского запроса с использованием WP_Query и последующего вызова wp_reset_postdata() в конце цикла.
Я все еще думаю, что это имеет место быть, но есть более простое решение, которое вы можете реализовать, используя специальный хук, который предоставляет WordPress.
В частности, я говорю о хуке pre_get_posts. В Справочнике по коду вы можете видеть, что это определяется как:
Срабатывает после создания объекта переменной запроса, но до фактического запуска запроса.
А поскольку запрос содержит много информации, мы можем использовать ее, чтобы определить, хотим ли мы изменить необходимые аргументы для работы с нумерацией страниц.
Под этим я подразумеваю, что нам нужно посмотреть на свойство post_type и значение posts_per_page. Для этого вы можете реализовать его следующим образом :
<?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);
}
}
Приведенный выше код не является объектно-ориентированным (если бы это было так, я бы создал подписчика и класс, отвечающий за обработку логики в функции), но вы можете увидеть, как его настроить в самом простом виде.
Поэтому, если вы работаете с нумерацией страниц пользовательского типа сообщений и не хотите иметь дело с различными аспектами настройки пользовательского запроса, это может решить вашу проблему.