Как создать пагинацию WordPress для пользовательских типов записей

Опубликовано: 2020-02-24

Разбивка на страницы пользовательского типа записей WordPress Создание разбиения на страницы для пользовательских типов записей не должно быть проблемой, поскольку вы можете использовать ту же идею, которую мы использовали здесь — как создать пользовательское разбиение на страницы запросов в 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 для произвольного типа записи

Этот код можно изменить в соответствии с вашим конкретным типом пользовательского сообщения. Пользовательский тип записи также можно создать с помощью плагинов генерации пользовательских типов записей.

Создайте шаблон страницы для отображения пользовательских типов сообщений

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

Чтобы создать собственный шаблон страницы, вы должны создать новый файл в корневой папке вашей темы.

Назовите файл — custom -page.php или любое другое имя, описывающее пользовательский тип записи, например, для пользовательского типа записи, созданного выше, имя может быть tutorials-page.php.

В этот файл добавьте заголовок пользовательского шаблона страницы, используя следующий код, и сохраните изменения:

 <?php
/**
 * Название шаблона: Шаблон учебных пособий
 */
 
 получить_заголовок(); 

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

Создайте пагинацию WordPress для произвольного типа записи

Создать пользовательский запрос типа записи

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

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

 <?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)."'>&laquo; First</a>";
            if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>&lsaquo; Предыдущий</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.