Спеціальна розбивка на сторінки WordPress
Взагалі кажучи, щоразу, коли я працюю з розбивкою на сторінки спеціального типу публікації, це роблю шляхом написання спеціального запиту за допомогою WP_Query, а потім виклику wp_reset_postdata() у кінці The Loop.
Я все ще вважаю, що це має місце, але є простіше рішення, яке ви можете реалізувати за допомогою спеціального хука, який надає 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);
}
}
Наведений вище код не є об’єктно-орієнтованим (якби він був, я б налаштував передплатника та клас, відповідальний за обробку логіки у функції), але ви можете побачити, як його налаштувати в найпростішій формі.
Отже, якщо ви працюєте з користувацьким типом розбиття на сторінки й не хочете мати справу з різними аспектами налаштування власного запиту, це може вирішити вашу проблему.