Как добавить пагинацию в WP Admin для кастомных типов записей

В стандартном админ-панели WordPress пагинация реализована для основных типов записей, таких как «Публикации» и «Страницы». Однако при работе с кастомными типами записей (custom post types) иногда возникают сложности с корректным отображением пагинации в списках записей. В этой статье мы подробно разберём, как правильно добавить и настроить пагинацию в админке для кастомных типов записей, учитывая фильтры и сортировки.

Почему стандартная пагинация может не работать для кастомных типов записей

При регистрации кастомного типа записи через функцию register_post_type пагинация в админке обычно работает автоматически. Но если вы дополнительно изменяете WP_Query или используете кастомные фильтры, пагинация может перестать корректно работать. Частая причина — неправильная передача параметров пагинации в запрос или вмешательство других хуков, меняющих параметры запроса.

Например, если вы используете хук pre_get_posts для модификации запроса в админке, нужно обязательно проверять, что запрос именно для нужного типа записи, и корректно передавать параметры пагинации.

Ещё одна причина — нестандартное использование нестандартных таблиц или кастомных методов вывода, которые не учитывают стандартные механизмы пагинации WordPress.

Добавление пагинации для кастомного типа записи в стандартном списке WP Admin

Рассмотрим пример, где у нас есть кастомный тип записи book, и мы хотим убедиться, что пагинация в списке книг в админке работает корректно даже при добавлении фильтров и сортировок.

Регистрация кастомного типа записи

Во-первых, регистрируем тип записи с параметром show_ui => true, чтобы он отображался в админке:

function wppagenavi_register_post_type_book() {
    $args = array(
        'label' => 'Книги',
        'public' => true,
        'show_ui' => true,
        'supports' => array('title', 'editor', 'custom-fields'),
        'has_archive' => true,
    );
    register_post_type('book', $args);
}
add_action('init', 'wppagenavi_register_post_type_book');

Корректная обработка пагинации через pre_get_posts

Если нужно доработать запрос в админке, обязательно проверяем, что запрос именно в админке и для нужного типа записи. Также параметр пагинации paged должен учитываться:

function wppagenavi_modify_admin_query($query) {
    if (is_admin() && $query->is_main_query() && $query->get('post_type') === 'book') {
        // Например, сортируем по метаполю 'rating'
        $query->set('meta_key', 'rating');
        $query->set('orderby', 'meta_value_num');
        $query->set('order', 'DESC');
        // Параметр paged будет учтен автоматически
    }
}
add_action('pre_get_posts', 'wppagenavi_modify_admin_query');

Таким образом, сортировка и фильтрация не нарушат работу пагинации в админке.

Создание кастомной пагинации в WP Admin для кастомных списков

Если вы создаёте собственный список кастомных записей в админке (например, через свой админ-меню или кастомный WP_List_Table), то пагинация должна реализовываться вручную. Рассмотрим пример кастомного класса с пагинацией.

Пример кастомного WP_List_Table с пагинацией

WP_List_Table — мощный класс для создания таблиц с пагинацией, сортировкой и фильтрами.

if (!class_exists('WP_List_Table')) {
    require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
}

class WPPagenavi_Books_List_Table extends WP_List_Table {
    public function __construct() {
        parent::__construct([
            'singular' => 'book',
            'plural'   => 'books',
            'ajax'     => false
        ]);
    }

    public function get_columns() {
        return [
            'cb'    => '<input type="checkbox" />',
            'title' => 'Название',
            'rating' => 'Рейтинг'
        ];
    }

    public function prepare_items() {
        $per_page = 10;
        $current_page = $this->get_pagenum();

        $args = [
            'post_type' => 'book',
            'posts_per_page' => $per_page,
            'paged' => $current_page,
            'meta_key' => 'rating',
            'orderby' => 'meta_value_num',
            'order' => 'DESC'
        ];

        $query = new WP_Query($args);

        $this->items = $query->posts;

        $this->set_pagination_args([
            'total_items' => $query->found_posts,
            'per_page' => $per_page
        ]);
    }

    public function column_default($item, $column_name) {
        switch ($column_name) {
            case 'title':
                return '<strong>' . esc_html($item->post_title) . '</strong>';
            case 'rating':
                return get_post_meta($item->ID, 'rating', true);
            default:
                return '';
        }
    }

    public function column_cb($item) {
        return sprintf('<input type="checkbox" name="book[]" value="%d" />', $item->ID);
    }
}

// Вызов и отрисовка таблицы в вашем админ меню
function wppagenavi_render_books_page() {
    $table = new WPPagenavi_Books_List_Table();
    $table->prepare_items();
    echo '<form method="post">';
    $table->display();
    echo '</form>';
}

Этот класс создаёт таблицу с пагинацией, сортировкой по рейтингу и чекбоксами для выбора записей. Важно использовать методы get_pagenum() и set_pagination_args() для корректной работы пагинации.

Использование плагинов для улучшения пагинации в админке

Если вы не хотите писать собственный код, можно подобрать плагины, улучшающие работу с кастомными типами записей в админке.

  • Clearfy Pro — плагин для оптимизации и кастомизации админки, включая улучшение списков и пагинации.
  • Expert Review — плагин с расширенными возможностями работы с кастомными типами записей и их выводом.

Эти инструменты помогут автоматизировать многие задачи и избежать типичных ошибок при работе с пагинацией в админке.

Советы по отладке пагинации в WP Admin для кастомных типов записей

1. Используйте var_dump($query) или дебаггер, чтобы проверить параметры WP_Query и убедиться, что paged передаётся корректно.

2. Проверьте, что хук pre_get_posts не сбрасывает параметры пагинации.

3. При использовании WP_List_Table всегда вызывайте set_pagination_args() с правильным количеством элементов.

4. Убедитесь, что не конфликтуют другие плагины, меняющие запросы в админке.

Следуя этим рекомендациям, вы легко сможете добавить и настроить пагинацию для любых кастомных типов записей в админке WordPress, сохраняя при этом удобство и функциональность интерфейса.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как использовать хуки пагинации в WordPress: практические примеры и советы
12.11.2025
Как отладить проблемы пагинации в WordPress: практические методы и примеры
15.03.2026
Как добавить пагинацию в WP Admin списке постов для кастомных типов записей
24.01.2026
Как добавить AJAX пагинацию в WP-PageNavi с поддержкой кеширования
04.01.2026
Как сделать пагинацию для WooCommerce с использованием WP-PageNavi
30.12.2025
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее