предыдущий и следующий пост одной категории на singlepost.php

Вопрос или проблема

Я хочу отображать предыдущие и следующие записи той же категории в 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: Пояснение по коду

  1. Цикл WordPress: Код начинается с основного цикла WordPress, который извлекает текущий пост с помощью the_post().

  2. Получение предыдущего и следующего поста: Функции previous_post_link() и next_post_link() используются для создания ссылок на посты, расположенные до и после текущего. Установка третьего параметра в true обеспечивает фильтрацию по категории.

  3. Вывод миниатюр постов: Если вам нужно добавлять миниатюры к ссылкам, вы можете дополнить код для получения изображений с помощью 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 оказалась достаточно простой с использованием функций ядра. Для достижения лучшего результата соблюдайте лучшие практики разработки и обязательно тестируйте код. Это не только улучшит пользовательский опыт, но и повысит видимость вашего контента в поисковых системах.

Оцените материал
Добавить комментарий

Капча загружается...