Generic selectors
Только точные совпадения
Искать в заголовках
Искать в контенте
Искать в статьях
Искать на страницах
Filter by Categories
FAQ
Hostenko
Вдохновение
Видеоуроки
Новости
Плагины
Темы
Уроки
Хаки

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

Создаем список похожих постов из той же рубрики, что и текущий пост WordPress

Специализированный хостинг для сайтов на WordPress!
Domenator - Купить Домен для сайта

 Скачать исходники

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

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

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

В этом уроке мы покажем вам, как создать свой плагин, который бы выполнял это задание. Плагин будет включать в себя функцию, которая добавит к вашему шаблону 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();

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

Создаем список похожих постов из той же рубрики, что и текущий пост WordPress

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

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

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

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

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

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

Заключение

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

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

Domenator - Купить Домен для сайта

Источник: code.tutsplus.com
Специализированный хостинг для сайтов на WordPress!
Алексей Шевченко
редактор wpcafe
Изучает сайтостроение с 2008 года. Практикующий вебмастер, специализирующий на создание сайтов на WordPress. Задать вопрос Алексею можно на https://profiles.wordpress.org/wpthemeus/

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

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

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

Sorry that something went wrong, repeat again!