Как создать пагинацию WordPress для пользовательских типов записей
Опубликовано: 2020-02-24
Создание разбиения на страницы для пользовательских типов записей не должно быть проблемой, поскольку вы можете использовать ту же идею, которую мы использовали здесь — как создать пользовательское разбиение на страницы запросов в WordPress. Нам нужно запросить пользовательский тип сообщения, а затем отобразить сообщения запросов, которые относятся к этому типу сообщений или к нескольким типам сообщений.
В этом посте я покажу вам, как создать пагинацию WordPress для пользовательских типов записей. Разбивка на страницы будет аналогична этой числовой разбивке на страницы. Мы создадим собственный запрос, который получит все пользовательские типы сообщений, а затем отобразит пользовательские типы сообщений с циклом и нумерацией страниц.
Создайте пользовательский тип записи
Первый шаг — создать пользовательский тип записи , используя следующий код:
/**
* Пользовательский тип сообщения - register_post_type()
* @description- Njengah Tutorial Пример пользовательского типа записи
* @ссылка - https://gist.github.com/Njengah/839466b773085ac2430772e081357cee
*
*/
add_action('init', "njengah_tutorial_cpt");
функция njengah_tutorial_cpt () {
$метки = массив(
'name' => _x('Учебники', 'общее название типа записи'),
'singular_name' => _x('Учебник', 'тип сообщения в единственном числе'),
'menu_name' => _x('Учебники', 'меню администратора'),
'name_admin_bar' => _x('Учебник', 'добавить новый в панель администратора'),
'add_new' => _x('Добавить новый', ''),
'add_new_item' => __('Добавить новый учебник'),
'edit_item' => __('Редактировать учебник'),
'new_item' => __('Новое руководство'),
'all_items' => __('Все туториалы'),
'view_item' => __('Просмотреть учебник'),
'search_items' => __('Руководство по поиску'),
'not_found' => __('Учебники не найдены'),
'not_found_in_trash' => __('Учебники не найдены в корзине'),
'parent_item_colon' => __('Учебники для родителей:'),
);
$аргументы = массив(
'иерархический' => правда,
'метки' => $метки,
'общедоступный' => правда,
'public_queryable' => правда,
'описание' => __('Описание.'),
'show_ui' => правда,
'show_in_menu' => правда,
'show_in_nav_menus' => правда,
'query_var' => правда,
'переписать' => правда,
'query_var' => правда,
'переписать' => массив ('слаг' => 'учебник'),
'capability_type' => 'страница',
'has_archive' => правда,
'меню_позиция' => 22,
"show_in_rest" => правда,
'supports' => array( 'название', 'редактор', 'автор', 'миниатюра', 'комментарии', 'ревизии', 'атрибуты страницы', 'настраиваемые поля' )
);
register_post_type('учебник', $args);
}Добавьте этот код в свой файл functions.php, и вы увидите, что на панели управления WordPress появится настраиваемый тип записи « Учебники» .

Этот код можно изменить в соответствии с вашим конкретным типом пользовательского сообщения. Пользовательский тип записи также можно создать с помощью плагинов генерации пользовательских типов записей.
Создайте шаблон страницы для отображения пользовательских типов сообщений
Нам нужно создать собственный шаблон страницы, который будет использоваться для отображения пользовательских типов записей с помощью цикла WordPress.
Чтобы создать собственный шаблон страницы, вы должны создать новый файл в корневой папке вашей темы.
Назовите файл — custom -page.php или любое другое имя, описывающее пользовательский тип записи, например, для пользовательского типа записи, созданного выше, имя может быть tutorials-page.php.
В этот файл добавьте заголовок пользовательского шаблона страницы, используя следующий код, и сохраните изменения:
<?php /** * Название шаблона: Шаблон учебных пособий */ получить_заголовок();
Теперь вы должны увидеть, что настраиваемый шаблон страницы отображается в параметре шаблона атрибутов страницы, как показано ниже:

Создать пользовательский запрос типа записи
Пользовательский запрос — это первый шаг, который позволит нам запрашивать существующие настраиваемые типы сообщений и отображать их в пользовательском шаблоне страницы, созданном на предыдущем шаге.
Ниже приведен код, который будет запрашивать пользовательский тип записи учебника и извлекать первые две записи, а затем отображать их в пользовательском шаблоне страницы, который мы создали выше.
<?php
/**
* Название шаблона: Шаблон учебных пособий
*/
получить_заголовок();
// Шаг 1: Создание пользовательского запроса
$paged = (get_query_var('paged'))? get_query_var('выгружается'): 1;
$аргументы = массив(
'posts_per_page' => 2, // запрашиваем последние 2 сообщения
'post_type' => 'учебник',
'выгружается' => $выгружается
);
$customPostQuery = новый WP_Query($args);
?>Отображение пользовательских сообщений учебника в пользовательском шаблоне страницы
Ниже приведен код, который будет запрашивать пользовательский тип сообщения и отображать его в пользовательском шаблоне страницы:
<?php
/**
* Название шаблона: Шаблон учебных пособий
*/
получить_заголовок();
// Шаг 1: Создание пользовательского запроса
$paged = (get_query_var('paged'))? get_query_var('выгружается'): 1;
$аргументы = массив(
'posts_per_page' => 2, // запрашиваем последние 2 сообщения
'post_type' => 'учебник',
'выгружается' => $выгружается
);
$customPostQuery = новый WP_Query($args);
?>
<!-- Шаг 2: Отображение сообщений, которые мы запросили на шаге 1 -->
<div класс="обертка">
<div id="основной" класс="контент-область">
<main id="main" class="site-main" role="main">
<?php
если($customPostQuery->have_posts() ):
в то время как ($ customPostQuery-> have_posts ()) :
$customPostQuery->the_post();
глобальный $пост;
?>
<div class="inner-content-wrap">
<ul class="cq-posts-list">
<li>
<h3 class ="cq-h3"><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></а></h3>
<дел>
<ул>
<дел>
<a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('миниатюра'); ?></а>
</div>
</ul>
<ул>
<p><?php echo the_content(); ?></p>
</ul>
</div>
</li>
</ul>
</div> <!-- конец сообщения в блоге -->
<?php в конце;
конец;
wp_reset_query();Создание пользовательской функции пагинации записей в WordPress
На этом шаге мы должны теперь создать пользовательскую функцию разбивки на страницы для типов сообщений, которая будет добавлена к функциям темы и будет вызываться после того, как цикл отобразит пользовательские типы сообщений.

Следующий код должен быть добавлен в functions.php для создания пользовательской функции разбивки на страницы.
// Функция пагинации пользовательского типа записи
функция cpt_pagination($pages = '', $range = 4)
{
$showitems = ($range * 2)+1;
глобальный $paged;
если (пусто ($ paged)) $ paged = 1;
если($страницы == '')
{
глобальный $wp_query;
$pages = $wp_query->max_num_pages;
если(!$страниц)
{
$страниц = 1;
}
}
если(1 != $страниц)
{
echo "<nav aria-label='Пример навигации по странице'> <ul class='pagination'> <span>Страница ".$paged." из ".$pages."</span>";
if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>« First</a>";
if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>‹ Предыдущий</a>";
для ($i=1; $i <= $pages; $i++)
{
if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
{
эхо ($paged == $i)? "<li class=\"элемент страницы активен\"><a class='page-link'>".$i."</a></li>":"<li class='page-item' > <a href='".get_pagenum_link($i)."' class=\"page-link\">".$i."</a></li>";
}
}
if ($paged < $pages && $showitems < $pages) echo " <li class='page-item'><a class='page-link' href=\"".get_pagenum_link($paged + 1)." \">i class='flaticon flaticon-back'></i></a></li>";
if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems < $pages) echo " <li class='page-item'><a class='page-link' href=' ".get_pagenum_link($pages)."'><i class='flaticon flaticon-arrow'></i></a></li>";
эхо "</ul></nav>\n";
}
}Вызов функции пагинации пользовательского типа сообщения в шаблоне страницы
Поскольку мы создали функцию разбивки на страницы пользовательского типа сообщений, и мы уже запустили цикл и отобразили пользовательские типы сообщений, теперь нам нужно добавить функцию разбивки на страницы в нижней части пользовательского шаблона страницы, чтобы мы отображали разбиение на страницы.
Ниже приведен код, который следует использовать для проверки существования пользовательской функции разбивки на страницы, и если она существует, мы должны вызвать ее для отображения разбивки на страницы.
// Шаг 3: здесь вызовите функцию разбиения на страницы
если (function_exists("cpt_pagination")) {
cpt_pagination($customPostQuery->max_num_pages);
}Мы создали настраиваемый тип сообщения, настраиваемый шаблон страницы, добавили функцию разбиения на страницы настраиваемого типа сообщения и отобразили как настраиваемые типы сообщений с запросом, так и функцию разбиения на страницы настраиваемого типа сообщений.
Пользовательские стили пагинации для типов сообщений
Вам нужно добавить стили в разбивку на страницы пользовательского типа записи, используя следующий код:
/**
* Пользовательские стили пагинации для типов сообщений
* @author Джо Нженга
*/
.pagination {
ясно: оба;
должность: родственница;
размер шрифта: 16 пикселей;
высота строки: 13 пикселей;
поплавок: справа;
тип стиля списка: нет;
ширина:100%
}
.pagination span, .pagination a {
дисплей:блок;
плыть налево;
поле: 2px 2px 2px 0;
отступы: 6px 9px 5px 9px;
текстовое оформление: нет;
ширина:авто;
цвет:#fff;
фон: #237697;
}
.pagination a: hover {
цвет:#fff;
фон: #000;
}
.pagination .current{
отступы: 6px 9px 5px 9px;
фон: #999;
цвет:#fff;Мы готовы просмотреть результат этого кода. Чтобы просмотреть разбивку на страницы пользовательского типа записи, вам нужно создать новую страницу с шаблоном пользовательской страницы, который мы создали на втором шаге.

После создания этой страницы вы должны увидеть, что страница отображает пользовательский тип сообщения, который мы запросили, и созданную нами разбивку на страницы, как показано на изображении ниже:

Последние мысли
Чтобы создать разбивку на страницы пользовательского типа сообщения, вам необходимо создать собственный шаблон страницы, добавить собственный запрос, чтобы получить все настраиваемые сообщения, которые вы хотите отобразить, и вызвать пользовательскую функцию разбиения на страницы, которую вы добавляете в functions.php. Чтобы получить этот полный код, я добавил его в репозиторий git, и вы можете получить к нему доступ здесь — WordPress Custom Post Type Pagination.
