Июн
6
24

Похожие статьи в 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% и полная поддержка пользователей.

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 9, средний балл: 5,00 из 7)
Загрузка...

категория Категории: Возможности; Хаки и секреты;
теги Теги: , , , , , .

комментария 24 к статье “Похожие статьи в wordpress без плагинов с использованием категорий блога”

  • ct   07.06.2011

    чтобы в результаты поиска не входил текущий пост нужно просто в аргументах добавить 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

  • Tod   08.06.2011

    ct, спасибо за уточнение, так, конечно, намного красивее получается код.

  • Сергей   20.06.2011

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

  • Tod   21.06.2011

    Сергей, для этих целей вам подойдет плагин Exclude categories позволяющий исключать категории с главной и RSS.

  • Серж   10.07.2011

    Прошу прощения за спам… но я проставил все коды что у вас в статье но так и не получается избавиться от ссылки на этот же пост (пример allremont59.ru/dizayn-domashnego-kabineta )

  • Tod   10.07.2011

    Серж, я бы еще разок внимательнее «прошелся» по кодам и посмотрел все ли правильно установлено. По идее, должно работать, т.к. я у себя же и тестировал.

  • lucky   12.07.2011

    У меня сработал код Tod’a, но метод ct не дал результата. Не могли бы вы подсказать, как можно реализовать нечто подобное для категории (условно — «галерея») со статьями с единичным изображением и описанием к нему, только чтобы выводился список статей из другой категории, в которых вставлено то же самое изображение, со ссылкой или без ссылки на статью в «галерее» (нечто вроде «ссылка на это изображение имеется в следующих статьях»).

  • Tod   14.07.2011

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

  • Вадим   01.08.2011

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

  • Tod   03.08.2011

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

  • Вадим   03.08.2011

    а!.. ну тогда все просто. я то думал тут программирование знать надо, а тут всего лишь if
    сарказм, так сказать, но все таки из меня программер не очень.

    в итоге я строчку:
    if ($category[1]->cat_ID != NULL) {

    заменил на if ($category[0]->cat_ID != XX && $category[0]->cat_ID != XX) {

    где ХХ категории которые я бы не хотел видеть в отображении.. в итоге я указываю категорию (собственно ключевую), и минуя все категории (я их вместо ХХ указал штук 20) она выдаёт мне то что нужно. криво, косо… но работает

  • Вадим   03.08.2011

    появилась другая проблема.. в отображении самой новости тоже выводяться рубрики (категории)… но вместе с нужными выводятся и «рабочие» рубрики.. как их убрать.. может подскажете?

  • Tod   04.08.2011

    Вадим, видимо, опять нужно гуглить и разбираться. Первым делом найти функцию. которая выводит список рубрик (есть несколько вариантов), во-вторых, посмотреть какими параметрами обладает функций, возможно там можно что-то подправить. Хотя, не уверен можно ли так сделать.

  • alimugik   26.08.2011

    Спасибо за пост, давно искал как реализовать вывод похожих постов без плагина… а то если разобраться — ведь ничего сложного, а так плагинов придется понаставить, что их больше 20 штук набирается

  • Косметолог   09.04.2012

    Интересно и доступно. Спасибо автору!

  • Сергей   03.05.2012

    А можно как-нибудь выводить список возможных подрубрик? допустим пост в определенной подрубрике и на странице поста выводились ссылки на эту подрубрику

  • Максим   29.04.2014

    Здравствуйте, а не подскажите как вывести рубрики и подрубрики в в статье.
    Что бы было понятней приведу пример — Актер (родительская) Такой то (под рубрика)
    хочу сделать что автоматически вставлялись в статью все теги которые вносились в статье

  • Tod   29.04.2014

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

  • Максим   30.04.2014

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

    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);
    ?>

  • Tod   30.04.2014

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

  • Слава   28.03.2015

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

  • Tod   29.03.2015

    Слава, спасибо за исправление, изменил в тексте.

  • Юрий   05.07.2015

    Миниатюры постов можно как то прикрутить ?

  • Tod   06.07.2015

    Юрий, миниатюры можно добавить базовым функциями, но куда проще воспользоваться уже готовыми решениями — вот 5 плагинов для миниатюр.

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

(следующая статья)

Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Лучшее в категории

Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости