Если вы ведете большой блог, то наверняка вам потребуется способ, как помочь своим читателям найти другие интересные посты, основываясь на том, что они читают сейчас или прочитали недавно.

Посмотреть демо | Скачать исходники

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

Смотрите также:

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

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

Что вам понадобится

Для выполнения этого урока вам понадобится:

  • доступ к админке WordPress
  • активная тема с шаблоном single.php
  • редактор кода

Создание плагина

Давайте начнем работу с создания плагина. Создайте новый файл для вашего плагина, наш мы назовем tutsplus-related-posts.php.

В новый файл добавьте следующий код:

<?php
/**
 * Plugin Name: Tuts+ Related Posts
 * Plugin URI: http://code.tutsplus.com/tutorials/creating-a-list-of-posts-with-the-same-categories-as-the-current-one--cms-22626
 * Description: This plugin identifies what categories the current post is in and outputs a list of the most recent posts in the same categories.
 * Version: 1.0.0
 * Author: Rachel McCollin
 * Author URI: http://rachelmccollin.com
 * License: GPL-3.0+
 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
 * Domain Path: /lang
 * Text Domain: tutsplus
 */

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

Определение рубрики текущего поста

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

Начните с создания функции, которая будет хранить ваш код:

function tutsplus_related_posts() {
 
    $post_id = get_the_ID();
    $cat_ids = array();
 
}

Теперь внутри вашей функции используйте функцию get_the_category() для получения массива данных, который содержит рубрики текущего поста:

$categories = get_the_category( $post_id );

Функция имеет только один параметр, ID поста, который определяет с каким именно постом вы хотите работать.

Далее, вам нужно создать массив, который будет содержать ID всех рубрик:

if ( $categories && ! is_wp_error( $categories ) ) {
         
    foreach ( $categories as $category ) {
 
        array_push( $cat_ids, $category->term_id );
 
    }
     
}

Давайте посмотрим что именно этот код делает:

  • Сначала он проверяет, не вернули ли $categories null или ошибку.
  • Далее, он добавляет ID каждой рубрики в массив.

Ваша функция теперь будет выглядеть так:

function tutsplus_related_posts() {
 
    $post_id = get_the_ID();
    $cat_ids = array();
    $categories = get_the_category( $post_id );
 
    if ( $categories && !is_wp_error( $categories ) ) {
 
        foreach ( $categories as $category ) {
 
            array_push( $cat_ids, $category->term_id );
 
        }
 
    }
 
}

Написание запроса для вывода постов той же рубрики

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

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

$current_post_type = get_post_type( $post_id );
     
$args = array(
    'category__in' => $cat_ids,
    'post_type' => $current_post_type,
    'posts_per_page' => '5',
    'post__not_in' => array( $post_id )
);

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

Теперь запустим запрос:

$query = new WP_Query( $args );
 
if ( $query->have_posts() ) {
 
    ?>
    <aside class="related-posts">
        <h3>
            <?php _e( 'Related Posts', 'tutsplus' ); ?>
        </h3>
        <ul class="related-posts">
            <?php
 
                while ( $query->have_posts() ) {
 
                    $query->the_post();
 
                    ?>
                    <li>
                        <a href="<?php the_permalink(); ?>">
                            <?php the_title(); ?>
                        </a>
                    </li>
                    <?php
 
                }
 
            ?>
        </ul>
    </aside>
    <?php
 
}
 
wp_reset_postdata();

Функция будет выводить в списке названия постов и ссылки на них.

Добавление функции в вашу тему

Последним шагом является добавление функции в файл в вашей теме. Мы создали дочернюю тему для Twenty Fourteen с новым файлом single.php и добавим в него функцию, под основным блоком контента. Вы можете добавить ее в любое другое место в файле, но не размещайте ее в середине цикла.

В ваш файл single.php добавьте следующий код:

tutsplus_related_posts();

Ниже вы увидите результат:

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

Альтернативный метод: метки и таксономии

Вы можете довольно легко изменить эту функцию для работы с тегами или другими элементами.

Чтобы определять теги вместо категорий, вы должны заменить функцию get_the_category() на get_the_tags(), а затем заменить аргумент для запроса 'category__in' на 'tag__in'.

Чтобы определить элементы таксономии, вы будете использовать get_the_terms() вместо get_the_category(), добавив taxonomy slug в качестве второго параметра. Затем нужно заменить аргумент 'category__in' на 'tax_query'.

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

Заключение

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

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

Источник: code.tutsplus.com

Вам понравился материал?

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

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.