Похожие статьи в wordpress без плагинов с использованием категорий блога
После того как пользователь попадает на ваш блог желательно задержать его внимание как можно дольше. Прочитав одну статью, почему бы не показать ему еще несколько, которые были бы интересны — это можно реализовать через ссылки на предыдущие и следующие посты, списки связных (похожих) заметок (related posts) и т.п. В одной из прошлых публикаций я рассказывал как сделать оформление записи wordpress по типу того, что вы можете видеть в моем блоге, где после текста идет перечень категорий, тегов, а также ссылки на статьи блога, которые еще можно почитать. Реализовано это все с помощью плагина Simple tags, а сегодня предлагаю ознакомиться с другим методом.
Принцип отбора похожих статей с помощью модуля Simple tags основывается на использовании одинаковых тегов (tags) в постах. Но, допустим, у вас простой блог, где тегов либо мало, либо они не используются вовсе — что же делать тогда? — очень просто, попробуем вывести похожие статьи блога, но по категориям, а точнее по ID категории.
Для этого открываем файл функций functions.php куда добавляем следующий код:
/** * related post with category * @param: int $limit limit of posts * @param: bool $catName echo category name * @param: string $title string before all entries * Example: echo fb_cat_related_posts(); */ if ( !function_exists('fb_get_cat_related_posts') ) { function fb_get_cat_related_posts( $limit = 5, $catName = TRUE, $title = '<h3>Recent Pages</h3>' ) { if ( !is_single() ) return; $limit = (int) $limit; $output = ''; $output .= $title; $category = get_the_category(); $category = (int) $category[0]->cat_ID; if ( $catName ) $output .= __( 'Kategorie: ' ) . get_cat_name($category) . ' '; $output .= '<ul>'; $args = array( 'numberposts' => $limit, 'category' => $category, ); $recentposts = get_posts( $args ); foreach($recentposts as $post) { setup_postdata($post); $output .= '<li><a href="' . get_permalink($post->ID) . '">' . get_the_title($post->ID) . '</a></li>'; } $output .= '</ul>'; return $output; } } |
Если файла не было или он пустой, то нужно его создать и добавить вокруг кода теги вначале <?php и в конце ?> (как правило, они уже есть).
Теперь заходите в файл темы единичной записи single.php и в нужном месте шаблона добавляете код отображения похожих статей:
<?php echo fb_get_cat_related_posts(); ?> |
Теперь что касается самого кода — это базовый пример, который я нашел в интернете, но его можно расширить и модифицировать. Изначально имеется 3 переменных:
- $limit (int) — количество отображающихся постов
- $catName (bool) переменная типа TRUE или FALSE отвечающая за отображение категории, которая применялась для выборки похожих статей.
- $title (string) — HTML текст, который отображается перед списком постов, чаще всего используется как заголовок.
Для своей задачи я немного расширил базовый код следующими конструкциями (это полезно тем, кто понимает что и зачем я дальше делаю, все остальные могут использовать пример кода выше).
1. Во-первых, в начале добавил перменную:
$curp = get_the_ID(); |
Она считывает ID текущего поста (поскольку задается отображение в файле single.php).
2. Второй шаг — для сравнения я брал вторую по счету категорию из списка для поста, а не первую. Разумеется нужно было проверить, существует ли вторая непустая категория. В моем случае этого требовало поставленная задача.
$category = get_the_category(); if ($category[1]->cat_ID != NULL) { $category = (int) $category[1]->cat_ID; } else { $category = (int) $category[0]->cat_ID; } |
3. Также я добавил сравнение для похожих записей с текущим постом, дабы не было ссылки на себя самого:
$recentposts = get_posts( $args ); foreach($recentposts as $post) { if ($post->ID != $curp) { setup_postdata($post); $output .= '<li><a href="' . get_permalink($post->ID) . '">' . get_the_title($post->ID) . '</a></li>'; } } |
Здесь есть один нюанс, который можете доработать — если из 5-ти постов, указанных в лимите, один совпадает с текущей статьей, то получается 4 итоговых ссылки. Поэтому, скорее всего, нужно считывать количество постов «$limit + 1», после чего выводить только 5 первых (если не было совпадения). В целом исходных код можете править как пожелаете — не отображать заголовок, если не было похожий статей и т.п.
Если вам нужно продвинуть сайт, но вы в этом не разбираетесь, — SEO специалист с опытом работы и успешными проектами должен помочь решить проблему.
LuckyStar’s blog : только лучшие кликовые спонсоры, мониторинг и новости буксов, матриц, партнерок. Рефбек до 100% и полная поддержка пользователей.
комментария 24 к статье “Похожие статьи в wordpress без плагинов с использованием категорий блога”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Записи и посты wordpress, оформление записи (5,91 из 7, голосов - 47)
- Проблема с адаптивными изображениями в Gutenberg редакторе WordPress (3,90 из 7, голосов - 48)
- Умный копирайт в footer.php для wordpress (5,63 из 7, голосов - 30)
- Обновление плагинов и тем в WordPress: автоматическое, через FTP, скрытие уведомлений (5,19 из 7, голосов - 31)
- Polylang — плагин для мультиязычных сайтов на нескольких языках в WordPress (4,42 из 7, голосов - 31)
- Плагин TinyMCE Advanced – wordpress текстовый редактор (6,35 из 7, голосов - 20)
- Рубрики и категории wordpress, функция wp_list_categories (6,05 из 7, голосов - 20)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS
чтобы в результаты поиска не входил текущий пост нужно просто в аргументах добавить post__not_in
$args = array(
‘numberposts’ => $limit,
‘category’ => $category,
‘post__not_in’=>array($current_post_ID)
);
http://codex.wordpress.org/Class_Reference/WP_Query#Post_.26_Page_Parameters
ct, спасибо за уточнение, так, конечно, намного красивее получается код.
Добрый вечер автору! Вопрос немного не по теме , но подскажите мне, пожалуйста, какой плагин на ВП можно использовать для вывода новостей не на главную страницу? Заранее спасибо.
Сергей, для этих целей вам подойдет плагин Exclude categories позволяющий исключать категории с главной и RSS.
Прошу прощения за спам… но я проставил все коды что у вас в статье но так и не получается избавиться от ссылки на этот же пост (пример allremont59.ru/dizayn-domashnego-kabineta )
Серж, я бы еще разок внимательнее «прошелся» по кодам и посмотрел все ли правильно установлено. По идее, должно работать, т.к. я у себя же и тестировал.
У меня сработал код Tod’a, но метод ct не дал результата. Не могли бы вы подсказать, как можно реализовать нечто подобное для категории (условно — «галерея») со статьями с единичным изображением и описанием к нему, только чтобы выводился список статей из другой категории, в которых вставлено то же самое изображение, со ссылкой или без ссылки на статью в «галерее» (нечто вроде «ссылка на это изображение имеется в следующих статьях»).
lucky, по вопросу я бы поискал подходящий плагин, так сложно подсказать сразу, не совсем уловил суть. Можно также найти сразу шаблон под галереи — обычно в них предусмотрены разные тематические штуки.
Приветствую. Ворошу свой сайтик, добавляя новые примочки, ведь прелесть сайта в итоге выливается не в чем ином как в мелочах. Проблема следующего порядка, каким образом исключить некоторые категории из выдачи данным хуком (хаком).
Вадим, это нужно разбираться в php коде примера. Переменная $category считывает текущую категорию и перед тем как перейти к работе нужно проверить не равна ли она тем категориям, которые вы хотите исключить. То есть добавляем в код условие if.
а!.. ну тогда все просто. я то думал тут программирование знать надо, а тут всего лишь if
сарказм, так сказать, но все таки из меня программер не очень.
в итоге я строчку:
if ($category[1]->cat_ID != NULL) {
заменил на if ($category[0]->cat_ID != XX && $category[0]->cat_ID != XX) {
где ХХ категории которые я бы не хотел видеть в отображении.. в итоге я указываю категорию (собственно ключевую), и минуя все категории (я их вместо ХХ указал штук 20) она выдаёт мне то что нужно. криво, косо… но работает
появилась другая проблема.. в отображении самой новости тоже выводяться рубрики (категории)… но вместе с нужными выводятся и «рабочие» рубрики.. как их убрать.. может подскажете?
Вадим, видимо, опять нужно гуглить и разбираться. Первым делом найти функцию. которая выводит список рубрик (есть несколько вариантов), во-вторых, посмотреть какими параметрами обладает функций, возможно там можно что-то подправить. Хотя, не уверен можно ли так сделать.
Спасибо за пост, давно искал как реализовать вывод похожих постов без плагина… а то если разобраться — ведь ничего сложного, а так плагинов придется понаставить, что их больше 20 штук набирается
Интересно и доступно. Спасибо автору!
А можно как-нибудь выводить список возможных подрубрик? допустим пост в определенной подрубрике и на странице поста выводились ссылки на эту подрубрику
Здравствуйте, а не подскажите как вывести рубрики и подрубрики в в статье.
Что бы было понятней приведу пример — Актер (родительская) Такой то (под рубрика)
хочу сделать что автоматически вставлялись в статью все теги которые вносились в статье
Максим, я бы поискал плагин под ваши задачи, по умолчанию ничего такого вроде бы нету в вордпресс.
да, нету, просто не сильно селен в программировании, единственное что нашел, но не до конца делает, то что мне нужно, выводит только родителя, а подрубрики не выводит
cat_ID;
if ($this_category_id > 0) :
$is_this_child_category = $wpdb->get_col (‘SELECT parent FROM wp_term_taxonomy WHERE term_id=’.$this_category_id);
if ($is_this_child_category[0] > 0) :
$parent_category = $is_this_child_category[0];
else :
$parent_category = $this_category_id;
endif;
$exept_this_child_categories = $wpdb->get_col (‘SELECT term_id FROM wp_term_taxonomy WHERE taxonomy=»category» AND parent!=0 AND parent !=’.$parent_category);
else :
$exept_this_child_categories = $wpdb->get_col (‘SELECT term_id FROM wp_term_taxonomy WHERE taxonomy=»category» AND parent!=0’);
endif;
$exclude_list = implode (‘,’, $exept_this_child_categories);
wp_list_categories(‘orderby=id&hide_empty=0&title_li= &exclude=’.$exclude_list);
?>
Максим, нужно отдельно найти код который выводит подрубрики для категории и соединить с этим:) К сожалению, не могу подсказать ничего по этому поводу, не сталкивался с таким, было только решение для подстраниц.
Здравствуйте!
Ваш текст из статьи «то не нужно его создать » мне кажется частица «не» лишняя, верно. За материал представленный Вами на этом сайте, большое спасибо!
Слава, спасибо за исправление, изменил в тексте.
Миниатюры постов можно как то прикрутить ?
Юрий, миниатюры можно добавить базовым функциями, но куда проще воспользоваться уже готовыми решениями — вот 5 плагинов для миниатюр.