Вопрос или проблема
Я хочу отображать предыдущие и следующие записи той же категории в WordPress
Мой код :
<?php
$prev_post = get_previous_post();
$next_post = get_next_post();
?>
<nav class="post-nav section">
<div class="row no-margin">
<?php // Отображение миниатюры предыдущей записи ?>
<div class="col-xs-12 col-sm-6 prev-post" style="padding:0px">
<?php
$prevPost = get_previous_post();
$prevthumbnail = get_the_post_thumbnail($prevPost->ID);
$post_tile=get_the_title($prevPost->ID);
$thumb = wp_get_attachment_image_src(
get_post_thumbnail_id($prevPost->ID), 'full' );
?>
<div class="post-nav-thumb" style="background-image:
url('<?php echo $thumb['0'];?>')" ></div>
<div class="post-nav-content">
<div class="post-nav-subtitle"><?php
previous_post_link('%link', 'Предыдущая запись'); ?></div>
<h2 class="post-nav-title"><span><?php
previous_post_link('%link', $post_tile); ?></span></h2>
</div>
</div>
<?php // Отображение миниатюры следующей записи ?>
<div class="col-xs-12 col-sm-6 next-post" style="padding:0px">
<?php
$nextPost = get_next_post();
$nextthumbnail = get_the_post_thumbnail($nextPost->ID);
$post_tile=get_the_title($nextPost->ID);
$thumb = wp_get_attachment_image_src(
get_post_thumbnail_id($nextPost->ID), 'full' );
?>
<div class="post-nav-thumb" style="background-image:
url('<?php echo $thumb['0'];?>')"></div>
<div class="post-nav-content">
<div class="post-nav-subtitle"><?php next_post_link('%link',
'Следующая запись'); ?></div>
<h2 class="post-nav-title"><span><?php
next_post_link('%link', $post_tile); ?></span></h2>
</div>
</div>
</div></nav>
Я бы не использовал get_posts() для настройки своего цикла на странице single.php. Я бы просто использовал обычный правильный цикл. Пожалуйста, посмотрите эту страницу в кодексе о разработке тем.
Вот пример single.php, который будет работать как ожидалось.
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php
// Начало цикла.
while ( have_posts() ) : the_post(); ?>
<?php
get_template_part( 'content', get_post_format() );
// Навигация между предыдущими и следующими записями.
previous_post_link( '%link', 'Предыдущая запись в категории', true );
next_post_link( '%link', 'Следующая запись в категории', true );
// Если комментарии открыты или у нас есть хотя бы один комментарий, загружаем шаблон комментариев.
if ( comments_open() || get_comments_number() ) {
comments_template();
}
endwhile;
?>
</div><!-- #content -->
</div><!-- #primary -->
Как указано в другом ответе, прочитайте, как использовать next_post_link
и previous_post_link
.
Ответ или решение
Для отображения предыдущего и следующего постов одной категории в WordPress на странице singlepost.php
, вам необходимо использовать функции previous_post_link()
и next_post_link()
. Давайте подробнее рассмотрим, как это реализовать, учитывая особенности кода и лучшие практики.
Шаг 1: Определите контекст
Для корректного отображения предыдущих и следующих постов с одинаковой категорией, важно учитывать, что эти функции по умолчанию ссылаются на посты в той же категории, если указать третий параметр как true
.
Шаг 2: Пример кода
Ниже приведен пример кода для singlepost.php
, который включает в себя вывод предыдущего и следующего постов с их миниатюрами:
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php
// Запуск главного цикла
while ( have_posts() ) : the_post();
get_template_part( 'content', get_post_format() );
// Навигация к предыдущему и следующему посту
?>
<nav class="post-nav section">
<div class="row no-margin">
<div class="col-xs-12 col-sm-6 prev-post">
<?php previous_post_link('%link', 'Предыдущий пост', true); ?>
</div>
<div class="col-xs-12 col-sm-6 next-post">
<?php next_post_link('%link', 'Следующий пост', true); ?>
</div>
</div>
</nav>
<?php
// Если комментарии открыты или пост имеет хотя бы один комментарий, загружается шаблон комментариев
if ( comments_open() || get_comments_number() ) {
comments_template();
}
endwhile; // Конец цикла
?>
</div><!-- #content -->
</div><!-- #primary -->
Шаг 3: Пояснение по коду
-
Цикл WordPress: Код начинается с основного цикла WordPress, который извлекает текущий пост с помощью
the_post()
. -
Получение предыдущего и следующего поста: Функции
previous_post_link()
иnext_post_link()
используются для создания ссылок на посты, расположенные до и после текущего. Установка третьего параметра вtrue
обеспечивает фильтрацию по категории. -
Вывод миниатюр постов: Если вам нужно добавлять миниатюры к ссылкам, вы можете дополнить код для получения изображений с помощью
get_the_post_thumbnail()
. Например:$prev_post = get_previous_post(true); if (!empty($prev_post)) { $prev_thumbnail = get_the_post_thumbnail($prev_post->ID, 'thumbnail'); echo '<div class="prev-thumbnail">' . $prev_thumbnail . '</div>'; }
Шаг 4: SEO-оптимизация
При создании постов в WordPress важно учитывать SEO. Например, использование семантически правильных заголовков и атрибутов alt
для изображений улучшает ранжирование в поисковых системах. Также рекомендуется добавлять ключевые слова в тексты ссылок вместо генерации "Предыдущий пост" и "Следующий пост".
Заключение
Реализация навигации по предыдущим и следующим постам одной категории в WordPress оказалась достаточно простой с использованием функций ядра. Для достижения лучшего результата соблюдайте лучшие практики разработки и обязательно тестируйте код. Это не только улучшит пользовательский опыт, но и повысит видимость вашего контента в поисковых системах.