Как вывести посты по рубрикам на отдельной странице в WordPress

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

Суть задачи – это вывести названия рубрик или отдельной рубрики на странице WordPress. Возникает вполне логичный вопрос для чего это нужно, ведь есть шаблон категории? Все правильно, но с точки зрения seo оптимизации шаблон категории не очень подходит для продвижения рубрик, его можно допилить с помощью произвольных полей, но можно использовать альтернативный подход – это вывод записей категории на странице WordPress.

Чем рубрика отличается от страницы? В первую очередь – это наличие возможности задать seo теги, такие как title и description даже при подключении бесплатных версий seo плагинов. Во-вторых – это возможность добавить описание с форматированием текста, привязать картинку. Все это также можно сделать на странице категории, но в данной статье мы рассмотрим пример использования шаблона страниц для этих целей.

Создание шаблона страницы

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

Для этого нужно зайти в папку с вашей темой по адресу: wp-content/themes/your_theme/. Для этого можно воспользоваться либо ftp клиентом, либо же панелью хостинга. Если вы новичок лучше перед началом работ сделайте бэкап сайта.

1. В корневой папке темы создаем файл, например category-page.php.

2. В ней же находим файл page.php и копируем его содержимое в файл category-page.php. Я использую дефолтную тему twentynineteen, и буду показывать на ее примере, вам же нужно учитывать html разметку вашего шаблона и копировать ваш код из файла page.php, внося изменения которые я покажу ниже.

<?php
get_header();
?>

	<div id="primary" class="content-area">
		<main id="main" class="site-main">

			<?php

			// Start the Loop.
			while ( have_posts() ) :
				the_post();

				get_template_part( 'template-parts/content/content', 'page' );

				// If comments are open or we have at least one comment, load up the comment template.
				if ( comments_open() || get_comments_number() ) {
					comments_template();
				}

			endwhile; // End the loop.
			?>

		</main><!-- #main -->
	</div><!-- #primary -->

<?php
get_footer();

3. Делаем из файла category-page.php шаблон страницы с помощью следующего кода.

<?php
/*
Template Name: Страница категории
*/
?>

4. Сохраняем. Идем в админку сайта в раздел «Страницы» — «Добавить новую». Указываем заголовок страницы, и справа в блоках настройки выбираем вкладку «Атрибуты страницы». В ней из выпадающего списка с названием «Шаблон», выбираем название шаблона которое мы задавали выше.

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

Задача 1. Вывести рубрики или  отдельную рубрику на странице в WordPress.

Для этих целей мы будем использовать функцию get_categories(). Дополнительно мы зададим аргументы для этой функции. Вы в свою очередь можете более детально ознакомиться с этой функцией в этой статье.

<?php
$arg_category = array(
	'orderby'      => 'name', // сортировка по названию
	'order'        => 'ASC', // сортировка от меньшего к большему
	'hide_empty'   => 1, // скрыть пустые рубрики
	'exclude'      => 19, // id рубрики, которые надо исключить
	'include'      => '', // id рубрики, из которых надо выводить
	'taxonomy'     => 'category', // название таксономии
);
$categories = get_categories( $arg_category );
?>

Здесь указан код для работы со всеми категориями, присутствующими на сайте. Если вы хотите ограничить этот параметр и вывести одну рубрику, то в поле ‘include’ приведенного выше кода задайте id рубрики. Узнать его можно перейдя в админке в раздел «Записи» — «Рубрики», справа нажимаем на нужную рубрику и переходим на страницу ее редактирования. Сверху, в строке браузера вы сможете увидеть ее id.

Переходим в файл category-page.php и редактируем его содержимое следующим образом.

<?php
/*
Template Name: Страница категории
*/
?>
<?php
get_header();
?>

<?php 
$arg_category = array(
	'orderby'      => 'name',
	'order'        => 'ASC',
	'hide_empty'   => 1,
	'exclude'      => '',
	'include'      => '',
	'taxonomy'     => 'category',
);
$categories = get_categories( $arg_category );
?>

	<div id="primary" class="content-area">
		<main id="main" class="site-main">

			<?php

			// Start the Loop.
			while ( have_posts() ) :
				the_post();

				get_template_part( 'template-parts/content/content', 'page' );

				// If comments are open or we have at least one comment, load up the comment template.
				if ( comments_open() || get_comments_number() ) {
					comments_template();
				}

			endwhile; // End the loop.
			?>

        <?php 
		    if( $categories ){
                foreach( $categories as $cat ){
                    echo $cat->name;	
                    }
			}
		?>

		</main><!-- #main -->
	</div><!-- #primary -->

<?php
get_footer();

Как видно, вверху файла добавлен вызов функции  get_categories() с аргументами, а ниже цикл перебора категорий подходящих под заданные нами параметры.

У вас должен получиться примерно такой результат.

Задача 2. Как вывести записи из рубрик на страницу в WordPress.

Для решения этой задачи будет использоваться класс WP_Query{}. Для вывода постов рубрики также задаем список аргументов, которые укажут параметры выборки. Опять открываем наш файл category-page.php и добавляем в него код для вывода записей.

<?php
/*
Template Name: Страница категории
*/
?>
<?php
get_header();
?>

<?php 
$arg_category = array(
	'orderby'      => 'name',
	'order'        => 'ASC',
	'hide_empty'   => 1,
	'exclude'      => '',
	'include'      => '',
	'taxonomy'     => 'category',
);
$categories = get_categories( $arg_category );
?>

	<div id="primary" class="content-area">
		<main id="main" class="site-main">

			<?php

			// Start the Loop.
			while ( have_posts() ) :
				the_post();

				get_template_part( 'template-parts/content/content', 'page' );

				// If comments are open or we have at least one comment, load up the comment template.
				if ( comments_open() || get_comments_number() ) {
					comments_template();
				}

			endwhile; // End the loop.
			?>

        <?php 
		    if( $categories ){
                foreach( $categories as $cat ){
                    echo $cat->name;	
                    }
			}
		?>
        <?php 
            if( $categories ){
                foreach( $categories as $cat ){ 
                    $arg_posts =  array(
                        'orderby'      => 'name', // сортировка по имени
                        'order'        => 'ASC', // от меньшего к большему
                        'posts_per_page' => 5, // по 5 постов
                        'post_type' => 'post', // тип записи "посты"
                        'post_status' => 'publish', // опубликованные посты
                        'cat' => $cat->cat_ID, // получаем id рубрик
                    );
                    $query = new WP_Query($arg_posts);
                ?>
                <?php		
                }
            }
        ?>

		</main><!-- #main -->
	</div><!-- #primary -->

<?php
get_footer();

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

<?php
/*
Template Name: Страница категории
*/
?>
<?php
get_header();
?>

<?php 
$arg_category = array(
	'orderby'      => 'name',
	'order'        => 'ASC',
	'hide_empty'   => 1,
	'exclude'      => '',
	'include'      => '',
	'taxonomy'     => 'category',
);
$categories = get_categories( $arg_category );
?>

	<div id="primary" class="content-area">
		<main id="main" class="site-main">

			<?php

			// Start the Loop.
			while ( have_posts() ) :
				the_post();

				get_template_part( 'template-parts/content/content', 'page' );

				// If comments are open or we have at least one comment, load up the comment template.
				if ( comments_open() || get_comments_number() ) {
					comments_template();
				}

			endwhile; // End the loop.
			?>

            <?php 
                if( $categories ){
                    foreach( $categories as $cat ){
                        
                    $arg_posts =  array(
                        'orderby'      => 'name',
                        'order'        => 'ASC',
                        'posts_per_page' => 3,
                        'post_type' => 'post',
                        'post_status' => 'publish',
                        'cat' => $cat->cat_ID,
                    );
                    $query = new WP_Query($arg_posts);
            
                    ?>
                    <?php if ($query->have_posts() ) ?>
                        <h2><?php echo $cat->name; ?> </h2>
                    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
                                    <div class="post-list">
                                        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                                    </div>

                    <?php endwhile; wp_reset_postdata()?>
                    <?php		
                        }
                    }
			?>

		</main><!-- #main -->
	</div><!-- #primary -->

<?php
get_footer();

Вот результат работы данного кода.

Чтобы вывести записи из определенной категории достаточно указать значение id для категории в аргументах к функции get_categories().

Аналогично данный код можно использовать для вывода категорий с постами и на главной странице сайта на WordPress. Только редактировать нужно будет файл index.php, который находиться в корневой папке вашей темы.

Используем плагины

Если вы не хотите создавать шаблоны и работать с кодом, тогда вы можете поставить один из многих плагинов с репозитория WordPress, которые помогут вам реализовать приведенный выше функционал. Есть целый ряд готовых решений, которые отличаются дизайном, количеством настроек и немного функционалом, например: List category posts, The Post Grid, Post Grid, WP Show Posts.

Для примера я покажу, как можно использовать плагин  WP Show Posts.

1. Идем в админку, меню «Плагины» — «Добавить новый». Ищем в строке поиска название плагина «WP Show Posts». Устанавливаем и активируем его.

2. Слева в меню у вас появиться пункт «WP Show Posts». Переходим в него.

3. Сверху нажимаем «Add new».

4. На первой вкладке настроек можно выбрать: тип записи, таксономию (например, после выбора категории появиться список созданных вами категорий), количество постов и чекбокс для включения пагинации.

5. Вторая вкладка это выбор разметки, где можно задать количество колонок и отступы между ними.

6. Далее идут настройки изображений, и вывода контента записи, где вы можете задать длину краткого описания и тег для ссылки заголовка поста.

7. Вкладка meta. Позволяет указать выводить ли автора, дату, категорию и количество комментариев к каждому посту.

8. More settings включают в себя настройки по сортировке данных для вывода.

Задаем заголовок, указываем настройки и жмем справа опубликовать. Копируем шорткод справа в блоке «Usage».

 После этого переходим в раздел «Страницы» — «Добавить новую». Указываем ее название, а в редакторе Gutenberg выбираем блок Шорткод, куда вставляем скопированный ранее код. Сохраняете и проверяете результат работы.

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

Поделиться в социальных сетях:
Нет комментариев к данной статье

Оставить новый комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *