Друзья, всем привет. Сегодня поговорим о том, как создать список похожих статей в WordPress без плагина. Похожие материалы улучшают поведенческие факторы. Обычно их размещают в конце статьи, так чтобы посетитель мог ознакомиться с другими статьями по теме.
Таким образом, если вы заинтересовали посетителя, то он задержится на вашем сайте подольше, а похожие статьи помогут ему лучше разобраться в решении его проблемы.
Создать список похожих статей с миниатюрами и без, можно чистым кодом php или плагином. Каждый выбирает свой путь.
До недавнего времени у меня на блоге использовался для этого плагин WordPress Related Posts. Хороший плагин, красиво можно оформить, под любой дизайн, вывод похожих статей.
Только вот в борьбе за скорость загрузки сайт я решил заменить этот плагин на простой код. Потому что этот плагин тормозил загрузку моего блога от 0,5 до 0,9 секунды в зависимости от времени и нагрузки.
И поэтому я решил использовать код php для вывода похожих статей, который позволяет выводить статьи, сортирую их по тегам или категориям (рубрикам).
Как вывести похожие статьи с сортировкой по тегам.
Как правило, список похожих статей выводится в конце статьи. В большинстве тем WordPress за статьи (записи) отвечает файл single.php. Именно в этот файл нужно вставить код, отвечающий за вывод похожих статей.
Предупреждение: сделайте резервную копию файла single.php перед началом работ.
Шаг 1: поиск места для вставки кода.
У всех нас разные шаблоны и структура их немного отличается друг от друга. К примеру, в моей теме, вообще, нет файла single.php. Я создал дочернюю тему, и все доработки делаю через файл функции темы. А это на порядок сложней, чем править обычные файлы.
Для определения правильного места вставки кода, вам нужно сначала посмотреть на станицу, найти на ней основные элементы и тогда в исходном коде вам будет проще найти необходимое место для код.
Как видно на скриншоте, подходящее место для вставки кода, находится после окончания статьи, перед навигацией.
Итак, открываете административную панель Вордпресс – «Внешний вид» — «Редактор» — «Одна запись (single.php)». И в файле ищите код, отвечающий за вывод статьи. Выглядеть он будет примерно так:
<?php while (have_posts()) : the_post(); ?> <?php get_template_part( 'content', get_post_format() ); ?> ...
После этого фрагмента можно вставить код похожих статей. В моём примере дальне будет идти код навигации.
Шаг 2: вставка кода похожих статей.
После того как вы определились с местом, вставляете вот этот код:
<!--Похожие статьи--> <?php global $post; $backup = $post; $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), 'posts_per_page'=>5, // Количество вывода похожих статей. 'ignore_sticky_posts'=>1 ); $my_query = new wp_query($args); if( $my_query->have_posts() ) { echo '<ul class="relatedPosts"><h2>Похожие статьи по теме:</h2>'; 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>'; } } $post = $backup; wp_reset_query(); ?>
Теперь после каждой статьи будет выводиться список похожих статей, релевантность которых определяется по тегам.
Внешний вид списка будет соответствовать дизайну вашего сайта, так как стили, определённые в шаблоне, распространяются и на этот список.
Но, если вы захотите внести изменения в стили, то вы всегда можете использовать класс relatedPosts
и задать свои стили. Этот класс я уже добавил в основу списка.
Также вы можете изменить в коде элементы, отмеченные оранжевым цветом.
Как вывести похожие статьи с сортировкой по рубрикам (категориям).
К примеру, вы захотите вывести похожие статьи не по тегам, а по категории. Предложив посетителю, ознакомится с похожими материалами из этой категории.
Тогда, действуя по описанному выше алгоритму, вы вставляете вот этот код:
<!--Похожие статьи--> <h2>Похожие статьи из категории: <?php the_category( ', ' ) ?></h2> <div><?php global $post; $backup = $post; $categories = get_the_category($post->ID); if ($categories) { $categories_ids = array(); foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id; $args=array( 'category__in' => $category_ids, 'post__not_in' => array($post->ID), 'posts_per_page'=>5, // Количество похожих статей. 'ignore_sticky_posts'=>1 ); $my_query = new wp_query($args); if( $my_query->have_posts() ) { echo '<ul class="relatedPosts">'; 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>'; } } $post = $backup; wp_reset_query(); ?></div>
Этот код сортирует статьи только по категории. Теги уже не играют никакой роли.
В качестве дополнительных настроек можно использовать параметр 'orderby'=>rand
. Который определяет вывод похожих материалов в случайном порядке.
Вставляется этот код рядом с параметром, отвечающим за количество похожих статей. При этом фрагмент код будет выглядеть так:
'posts_per_page'=>5, // Количество похожих статей.
'orderby'=>rand, // Вывод в случайном порядке.
'ignore_sticky_posts'=>1
Также к этому коду можно добавить и вывод статей с миниатюрами. Но, для этого придётся поработать над стилями оформления. Кому интересно, как это сделать, читайте статью по ссылке выше или смотрите, как выводятся миниатюры на примере списка популярных статей.
А теперь я предлагаю посмотреть видеоурок, в котором я покажу, как проанализировать шаблон, выбрать место для вставки и вставить код.
Вот и всё, друзья. Теперь вы знаете, как вывести список похожих статей без плагина. Простой код и никакой нагрузки на сайт. А это очень важно, когда речь идёт о скорости загрузки сайта.
На этом у меня сегодня всё. Я желаю вам удачи и до встречи в новых статьях и видеоуроках.
С уважением, Максим Зайцев.
Привет, у меня к тебе вопрос Вот у тебя есть бесплатный курс «как набрать текст голосом». Я тоже хочу создать одностраничник на своём сайте. Дело в том, что создать поддомен не проблема, а как его реализовать я не могу понять.
Например, создаю поддомен и у меня отображается существующий сайт. То бишь, если http://1zaicev.ru/ — то поддомен допустим promo.1zaicev.ru — причём оба будут считаться как один сайт, при входе в админку меняется тема и на основном сайте. Короче, у меня получился просто клон моего сайта.
Я хотел спросить, как ты реализовывал одностраничник. Я вчера пытался сделать, сегодня — и через плагины и вручную, а также хотел установить CMS — но вообще ничего не нашёл. Заранее спасибо
Вань, привет. Зачем тебе морочиться с поддоменом. Сделай как я, одностраничник в отдельной папке. Мой бесплатный курс расположен по адресу http:/1zaicev.ru/spic/. В этой папке расположен каркас страницы index.html и стили style.css. Ну и конечно изображения для оформления страницы. Всё, ничего лишнего. Не надо ни каких поддоменов, установки на них движка и плагинов.
Несмотря на то, что я сделал копию файла single.php, я запорол сайт после введения вашего кода. Хорошо, что на хостинге была резервная свежая копия сайта. Вы не подскажете, где конкретно мне вставить код. Я бы вам выслал копию своего файла «Одна запись».
Здравствуйте, Николай. Такое иногда бывает. Вот почему перед началом любых работ над сайтом нужно делать резервную копию всего сайта или тех файлов с которыми намерены работать.
У вас после статьи идёт видео и блок рекламы Адсенс. Это блок заключён в абзац (тег Р), а сразу на ним идёт закрытие блока ДИВ. Вставьте код перед закрытием блока див.
Если не понятно, тогда пришлёте мне файл. Желаю удачи!
Маским, а куда вам выслать файл?
Присылайте на maksim@1zaicev.ru
Спасибо,Максим за обширную и очень понятно изложенную статью.
На практике пока применять не пробовала, но уже одно то, что советы не отпугивают сложностью и заумность радует.
Всегда рада размещать твои материалы у нас в Клубе комп.Пенсионеров.
Успехов !
Mila, методика не сложная и реализовать её легко. А если будут трудности, я всегда готов помочь решить любые возникшие трудности. Спасибо за доверие и публикации в клубе. Удачи!
Возможно, некоторым новичкам правильнее для этих целей использовать плагин — просче это!
Любой код нужно дорабатывать самому: если ни полностью перестраивать под свой сайт.
Эхех-х…
Удачии………
Здравствуйте, Александр. В том то и дело, что новички используют слишком много плагинов. А в этом коде почти ничего менять не надо. Можно вообще ничего не менять. А вот чтобы изменить внешний вид списка, можно и добавить несколько стилей. В любом случае этому нужно учится, так как не будешь же по каждой мелочи обращаться к специалисту.
Привет, Максим!
Ну, в общем — да! Это, я как-то не подумавши брякнул. Да и признаться, к коде глубоко не разбирался… все они одинаковы.
Просто, я, с той колокольни звонил, что подобные коды более необходимы нежели другие, ибо — это прямое и нужное улучшение блога — а потому и плагин не грешно.
А у новичков обычно, всё подряд заплагинено)
Сужу исключительно по себе в молодые лета) !!
Ведя совой сайт нужно приходится постоянно что-то улучшать, дорабатывать и переделывать. Поэтому хотят новички или нет а вникать в это нужно. К чему я и призываю всех владельцев сайтов и блогов. А не имея хоть малого представления о том, что нужно делать, трудно даже специалисту объяснить, что нужно.
Здравствуйте, Максим!
Совершенно справедливо! Конечно, учится нужно.
И с предыдущим оратором, Александром, согласен.
Но — тут возникает закономерный вопрос о правильном обучении: ибо неправильное обучение ведёт по граблям…
Здравствуйте, Сергей. Да, всё правильно. Но, как узнать где правильно, а где нет. Если человек до этого с подобными вопросами не сталкивался. Нужно изучать тему, присматриваться к авторам, и со временем появится опыт и учителя, которые учат правильно.
Не получается у меня сделать похожие записи. Все дело в том, что у меня в single.php код не закрывается, на определенных местах. Вот так он выглядит:
Вот по идее мне нужно вставить код «вывода похожих статей» после этого: <?php while (have_posts()) : the_post(); или после этого: get_template_part( 'content', get_post_format() );
Проблема в том, что когда вставляю в эти места код, происходит ошибка и страница не загружается.
Если вставить код перед: то он отобразиться, но к сожалению после комментариев. Подскажите что мне делать?
Здравствуйте, Михаил. Сплошные коды в комментариях у меня запрещены, так что ваш код не прошёл. Предполагаю, что можно закрыть код после функции, вставить код похожих материалов и снова открыть рнр. Если не получится, пришлите мне на почту (maksim@1zaicev.ru) файл и я посмотрю.
Здравствуйте! Подскажите, пожалуйста, куда вставлять код «похожие записи» для темы Castomizr? Страницы single.php в ней нет, если вставить в index.php, то последние записи появляются на главной, на странице рубрик и т.д.
Здравствуйте, Наталья. В этой теме всё лучше делать через файл functions.php, так как она вся создана на API ключах. Напишите мне на почту, я поделюсь с вами кодом.
Спасибо, Максим, за код! Я не справилась с его внедрением, для меня этот шаблон темы сложен. Пришлось временно ставить плагин. Надо набраться знаний.
Ничего страшного, Наталья. Вы только начинаете познавать это дело. В скором времени всё получится. Удачи!
Максим я вставил твой код в файл single.php,но она не там вставилась, удалил код,но со страницы этот запись не удаляется, почему?
Здравствуйте, Ришат. Обновите кэш браузера и всё удалится, если вы удалили код в файле. А вообще, на будущее, когда работаете с кодом, делайте это в режиме инкогнито или периодически сбрасывайте кэш браузера.
Максим, добрый день. А как сделать, чтобы данный список похожих статей без плагина корректно выводился на адаптиве?
Здравствуйте, Наталья. Тут всё зависит от наследования родительских стилей. Но, в любом случае, можно присвоить блоку DIV класс или идентификатор и под них применить стили для мобильных устройств (медиазапросы). Статьи на эту тему есть на блоге.