» » » Как вывести похожие записи или статьи без плагина на WordPress
logotip

Как вывести похожие записи или статьи без плагина на WordPress

Всем привет! В этот раз на SEO-Mayak.com я продемонстрирую: как вывести похожие записи или статьи на WordPress без плагина.

Существует масса плагинов для вывода похожих статей, такие как: Simple Tags, Similar Posts или Yet another related posts.

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

Известно, что плагины не хило нагружают сервер и значительно снижают скорость загрузки страницы. Заметно это становится не сразу, а со временем, когда блог наполнится контентом и посещаемость будет стремится к 1000 уников.

pohojie zapisi wordpress

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

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

Два способа вывода похожих записей или статей без плагина

Обращаюсь к начинающим веб-мастерам. Ребята, не бойтесь Вы этих кодов, не такие они и страшные. Если вы опасаетесь напороть косяков, то установите себе на компьютер локальный сервер и проводите на нем эксперименты. Я сам, до сих пор все новшества сначала испытываю на локалке и только потом уже готовые решения переношу на свои реальные блоги.

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

Так что выводить похожие записи надо обязательно!

И так, приступим к рассмотрению вариантов кодов вывода похожих записей на WordPress без плагинов.

Обычно блок похожих записей располагается под статьей, а за вывод статей отвечает файл single.phpс которым мы и будем работать. Напомню, что файл single.php находиться в папке с Вашей темой: wp-content -> themes -> Название темы, а для редактирования файлов советую пользоваться бесплатным текстовым редактором Notepad++.

Способ №1. Функция сортировки похожих статей по меткам (тегам)

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

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

<div class="similar_records">
<h3>Похожие записи:</h3>
<?php $tags = wp_get_post_tags($post->ID);
if ($tags) {
 $tag_ids = array();
 foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
 $args=array(
 'tag__in' => $tag_ids, // Сортировка производится по тегам
 'post__not_in' => array($post->ID),
 'showposts'=>5 // Цифра означает количество выводимых записей
 );
 $my_query = new wp_query($args);
 if( $my_query->have_posts() ) {
 echo '<ul>';
        while ($my_query->have_posts()) {
            $my_query->the_post();
        ?>
            <li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
        <?php
        }
        echo '</ul>';
    }
 wp_reset_query();
 }
 ?></div>


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

‘orderby’=>rand,

Прописываем это условие после 9 строки:

‘tag__in’ => $tag_ids,

Также не лишнем будет добавить еще одно условие:

‘caller_get_posts’=>1,

Которое запрещает повторение одной и той же ссылки. Например, у Вас на блоге еще небольшое количество статей, а вы в коде указали вывод по 10 ссылок:

‘showposts’=>10

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

В итоге у нас должен получится такой код:

<div class="similar_records">
<h3>Похожие записи:</h3>
<?php $tags = wp_get_post_tags($post->ID);
if ($tags) {
 $tag_ids = array();
 foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
 $args=array(
 'tag__in' => $tag_ids, // Сортировка происходит по тегам (меткам)
 'orderby'=>rand, // Добавляем условие сортировки рандом (случайный подбор)
 'caller_get_posts'=>1, // Запрещаем повторение ссылок
 'post__not_in' => array($post->ID),
 'showposts'=>5 // Цифра означает количество выводимых записей
 );
 $my_query = new wp_query($args);
 if( $my_query->have_posts() ) {
 echo '<ul>';
        while ($my_query->have_posts()) {
            $my_query->the_post();
        ?>
            <li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
        <?php
        }
        echo '</ul>';
    }
 wp_reset_query();
 }
 ?></div>


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

Способ №2. Функция сортировки похожих статей по рубрикам (категориям)

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

<div class="similar_records">
<h3>Похожие записи:</h3>
<?php $categories = get_the_category($post->ID);
if ($categories) {
 $category_ids = array();
 foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;
 $args=array(
 'category__in' => $category_ids, // Сортировка производится по категориям
 'orderby'=>rand, // Условие сортировки рандом
 'post__not_in' => array($post->ID),
 'showposts'=>5, //Количество выводимых записей
 'caller_get_posts'=>1); // Запрещаем повторение ссылок
 $my_query = new wp_query($args);
 if( $my_query->have_posts() ) {
echo '<ul>';
        while ($my_query->have_posts()) {
            $my_query->the_post();
        ?>
            <li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
        <?php
        }
        echo '</ul>';
    }
wp_reset_query();
}
?></div>


Я сразу включил условие сортировки рандом, но если вы хотите установить сортировку по датам, то просто уберите строчку:

‘orderby’=>rand,

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

Стили для блока похожих записей

Если мы просто вставим код в файл saingle.php без применения стилей, то выглядеть блок похожих записей будет так:

pohojie zapisi1

Что согласитесь, мягко сказать, не эффектно. Поэтому прописываем стили для класса:

class="similar_records"

За стили отвечает файл style.css, который также находиться в папке с темой.

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

/*похожие записи*/

.similar_records a{     /*  "а" в конце класса означает, что все стили прописываются для ссылок  */
 background:#F6F9FD url(images/st.gif) no-repeat left;    /*  Цвет фона и адрес картинки перед каждой ссылкой */
 border-bottom-left-radius: 5px;   /* Закругление левого нижнего края фона в пикселях */
 border-bottom-right-radius: 5px;  /* Закругление правого нижнего края фона в пикселях */
 border-top-left-radius: 5px;  /* Закругление левого верхнего края фона в пикселях */
 border-top-right-radius: 5px;  /* Закругление правого верхнего края фона в пикселях */
 color: #444444;  /* Цвет самой ссылки */
 display: block;  /* Обозначаем элемент как блочный */
 margin: 5px 0;  /* Внешние отступы, в данном случаи указываем расстояние между ссылками */
 padding: 5px 5px 5px 5px;  /* Внутренние отступы */
 position: relative;  /* Привязываем блок к реальному местоположению в файле */
 text-decoration: none; /* Отменяем подчеркивание ссылок и элементов списка (1,2,3 и т.д.)
}

.similar_records a:hover{
color: #C6C600;   /* Цвет ссылки при наведении курсора */
}

Не бойтесь менять значения отступов, цвет фона или ссылок, подгоняйте стили под дизайн Вашего шаблона. Ничего такого страшного нет, самое главное не забывайте ставить «;»  в конце строчки. Если Вы используете редактор Noteped++, то подсветка синтаксиса будет вам подсказывать, где закралась ошибка. Успехов!

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

На сегодня у меня все. Как Вам статья?

С уважением, Виталий Кириллов

Это стоит посмотреть! Представление от всемирно известного цирка Du Soleil

Комментарии: 47

  1. Олег:

    Кстати на счет одинаковых записей. У меня на блоге появились 2 статьи, которые абсолютно одинаковы. Написаны они еще в том году. Попробуем воспользоваться данным плагином для решения проблемки:)
    Успехов Вам и всего хорошего! 🙂

    Ответить
  2. Владимир:

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

    Ответить
    • Виталий Кириллов:

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

      Ответить
  3. Sasha:

    Статья, как всегда, отличная!) Многим пригодится. Я тоже, может, в ближайшие месяцы доберусь до замены некоторых плагинов на код. Пока еще до 1000 уников еще оочень далеко)

    Ответить
    • Виталий Кириллов:

      Все равно Саша это не за горами!

      Ответить
  4. Елена:

    Спасибо за обьяснение стилей. Этого я не понимала. У меня вопрос. Я сделала по коду чтобы показывало похожие записи, но у меня выводятся блоки и названия статей. А самых картинок нету. Я так поняла, что у меня нету миниатюр к записям, что ли. Как это можно исправить?

    Ответить
    • Виталий Кириллов:

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

      Ответить
  5. Успех:

    Эх добавила ваш сайт в закладки.Как только найдется свободная минутка попробую так сделать как написано в вашей статье.

    Ответить
  6. Виктор:

    Спасибо за статью! У меня при вставке 2-м способом возникает проблема: если вставлять после комментариев, то все нормально, а если вставляю после соц.кнопок (именно сюда и нужно вставить), то после сохранения изменений вместо записи появляется пустая белая страница.

    Вставляю скрипт после строчки:

    // Include Social Shares
    if(get_post_meta($post->ID, ‘post-option-social-enabled’, true) == «Yes»){
    echo «»;
    echo $translator_social_share;
    echo «»;
    include_social_shares();
    echo «»;
    }

    Ответить
    • Виталий Кириллов:

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

      Ответить
  7. Юрий:

    У меня при вставке рекомендуемого кода второго варианта появляется ошибка Parse error: syntax error, unexpected ‘}’ in Z:\home\localhost\www\wp\wp-content\themes\twentytwelve\single.php on line 44. В чём может быть проблема. Код копирую правильно, но все равно скобка чем-то не нравится вордику)

    Ответить
    • Виталий Кириллов:

      Юрий, возможно код не хочет работать на локальном сервере.

      Ответить
  8. Александр:

    Приветствую, Виталий!
    Не слушается меня мой single.php! Сначала пробовал вставить код на локальном. Не выходило. Теперь попробовал и на рабочем блоге. Результат в принципе один — блог перестает работать, главная открывается, а вот ни один переход по любой ссылке становится невозможен. Испробовал все возможные варианты, где вставить код. Но, видно, файл устроен довольно хитро! Там, кстати, нет ни одного div’а. Лишь несколько строчек записей между знаками Часть из них заключена, насколько я понял, в теги

    Ответить
    • Виталий Кириллов:

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

      Ответить
      • Александр:

        Хорошо!

        Ответить
  9. Александр:

    Как и ожидал, знаки ?php и тег article не прошли в коммент. Как тебе можно показать фрагмент кода?

    Ответить
    • Виталий Кириллов:

      Александр, чтобы код отображался, заключите его в теги [ php][ /php], без пробелов конечно.

      Ответить
  10. ваня:

    Здравствуйте, а можно ли сделать так, что бы статьи формировались по категориям и меткам? Спасибо.

    Ответить
    • Виталий Кириллов:

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

      Ответить
  11. OneProg:

    Отличное решение для перелиновки на сайте.

    Ответить
  12. Odessit:

    Добрый день! Не могу понять, как же мне правильнее выводить похожие записи. Изначально выставил второй вариант. Теперь же я не уверен. Вот у меня кулинарный сайт, к примеру я открываю статью свинина тушеная с солеными огурцами, она находится в рубрике вторые блюда и похожие записи выдаются из этой же рубрики, но это не про свинину, а куриные сердечки в сметане, карп с картошкой в духовке и прочее, что присутствует в этой рубрике. Может вывод по меткам будет правильнее? Просто если выбирать мо меткам, к примеру курица, то это могут быть как вторые блюда, так и первые или вообще выпечка, что же лучше?

    Ответить
    • Виталий Кириллов:

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

      Ответить
  13. Петя:

    Доброй ночи! Извините, что не по теме, Вы не знаете, как вывести последние комментируемые записи (не последние комментарии а именно последние комментируемые записи)? Очень нужно. Спасибо!

    Ответить
  14. Андрей:

    Виталий, подскажите пожалуйста, этот код подойдёт только для записей или для страниц тоже? Дело в том, что на моём сайте новостойка-анапы.рф я сделал новостную ленту и там с похожими записями вполне справляется вп релэйтед пост, а статьи я пишу не в записях, а создавая новые страницы. Как бы мне в конце страниц сделать вывод похожих страниц?

    Ответить
    • Виталий Кириллов:

      Андрей, данный способ не подойдет для статических страниц.

      Ответить
  15. Илья:

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

    Ответить
    • Виталий Кириллов:

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

      Ответить
      • Илья:

        Жаль, не разберусь.

        Ответить
  16. Олеся:

    А как сделать так, чтобы перед названием выводимых рубрик или какие-нибудь звёздочки стояли, или чёрточки?

    Ответить
    • Виталий Кириллов:

      Олеся, вы имеете в виду символы?

      Ответить
      • Олеся:

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

        статья
        статья
        статья

        А я хочу:

        «символ» статья
        «символ» статья

        Так ведь возможно сделать?

        Ответить
        • Виталий Кириллов:

          Олеся, вообще тег ли выводит вот такой символ → • ← и если его нет, то значит от отменен в файле style.css такой директивой:

          list-style-type: none;
          
          Ответить
  17. Василий Цубера:

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

    Ответить
  18. IgorA:

    Вставил код. Все получилось, но надпись «Похожие записи» отображается на сайте знаками: ???????
    Если написать латиницей, то все нормально. Может подскажете, в чем причина и как исправить?

    Ответить
    • Виталий Кириллов:

      Ван надо исправить кодировку файла. В комментариях я уже отвечал на данный вопрос.

      Ответить
  19. Алексей:

    Здравствуйте!
    Спасибо за интересную статью!
    Но вот у 2 вопроса.
    1.
    Я не хочу чтобы статьи выводились по рубрикам или меткам. Тем более что я так понимаю,
    что для того чтобы похожие статьи выводились по меткам, нужно обязательно прописывать метки для каждой статьи…?!
    Подскажите кто-нибудь, а есть ли возможность, прописать какой-нибудь код, чтобы похожие статьи выводились по совпадению в тайтле?

    2.
    Как убрать заголовок «похожие записи», на страницах где этих записей похожих нет?

    Ответить
  20. Роман:

    Добрый день, спасибо за хороший метод перелинковки без плагина. Интересует следующий вопрос, как сделать что бы ссылки были постоянными на похожие записи, так как при обновлении страницы происходит реиндексация всех ссылок, получается что ни одна страница не имеет постоянную ссылку с другой. Читал об этом, пишут что полезно для скоросной индексации гуглом, а по поводу провижения НЧ?

    Ответить
    • Виталий Кириллов:

      Да Роман такие мнения есть, но последние слово все равно за Гуглом. Ведь на индексацию влияет множество факторов.

      Ответить
  21. Виктор:

    Давняя, но крайне полезная статья. Что касается «Функции сортировки похожих статей по меткам», как можно сделать так, чтобы сортировка выполнялась по всем местам, КРОМЕ одной, для определенность с ID=100?

    Ответить
    • Виталий Кириллов:

      Попробуйте так:

      ‘post__not_in’=>100,

      Ответить
  22. Иван:

    Здравствуйте! Все отлично работает. Скажите, как эти функции правильно засунуть в файл function.php, чтобы выводить шорткодом?

    Ответить
    • Виталий Кириллов:

      Данные функцию в шорткод засунуть не получится, так как они работают только внутри цикла WordPress.

      Ответить
  23. Анна:

    Здравствуйте! Код отлично работает. Но у меня сейчас стоит дополнительная задача. У меня каждый пост относится к трем разным рубрикам. Сейчас сортировка происходит по совпадению хотя бы одной рубрики. Можно ли сделать чтобы сортировало по совпадению всех рубрик? Заранее спасибо.

    Ответить
    • Виталий Кириллов:

      Анна в комментариях к статье есть ответ на Ваш вопрос, поищите.

      Ответить
  24. Станислав:

    Добрый день установил Ваш код — все работает.
    Но после установки кода — первая запись в категориях теперь дублируется.
    В каждой категории первая запись идет также и второй.
    Убираю Ваш код — все нормализуется.
    Но он мне очень понравился — отлично работает и я хочу его оставить.
    Подскажите как это можно исправить.

    Ответить
  25. Максим Бойко:

    Добрый день! Спасибо большое за интересный пост, на днях собираюсь сделать нечто похожее, но с миниатюрами. Про них тоже прочёл.

    Ответить
  26. Саня:

    А как сделать чтобы похожие записи показывались в странице вложения???
    Например сайт.ру/какая-то-запись РАБОТАЕТ
    а на здесь сайт.ру/какая-то-запись/продолжение НЕ РАБОТАЕТ

    Ответить

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

Внимание комментатор! Прежде чем вставить: HTML, JavaScript или PHP код в свой комментарий, преобразуй его в html сущность!

Subscribe without commenting

» Подписаться на комментарии по RSS