Для улучшения внутренней перелинковки, а так же для того, чтобы посетители оставались на страницах блога как можно дольше, можно выводить список похожих публикаций. Его можно сделать с помощью плагинов, а можно и самостоятельно, без плагинов и виджетов, при чем не используя теги. Для вывода такого списка воспользуемся категориями, и выведем последние публикации из той категории, к которой принадлежит просматриваемый пост.
В файл functions.php вставьте такой код:
function show_previous_posts_from_category ($the_post_id, $the_category_id = 0, $post_num = 5){ $num = 0; global $wpdb; $sql = "SELECT wposts.* FROM $wpdb->posts wposts LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) WHERE $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id = '$the_category_id' AND wposts.post_status = 'publish' AND wposts.post_type = 'post' AND wposts.ID get_results($sql, OBJECT); //if (!$result){ echo "Записей не найдено"; return false; } global $post; echo '<ul>'; foreach ($result as $post){ setup_postdata($post); //выводим информацию как обычно в ВП это бывает :) echo '<li><span>',the_time('j/m'),' </span>'.get_the_title().'</li>'; $num++; } // если предыдущих постов меньше загаданного количества, выводим ниже последние из рубрики if ( $num < $post_num || !$result ){ $need_more = $post_num-$num; $more_posts = get_posts("numberposts=$need_more&category=$the_category_id"); foreach ($more_posts as $post){ setup_postdata($post); //выводим информацию как обычно в ВП это бывает :) echo '<li><span>',the_time('j/m'),' </span>'.get_the_title().'</li>'; }} echo '</ul>'; }
Этот код создает функцию, которая выбирает последние публикации из той категории, к которой принадлежит просматриваемый пост. После этого остается только вывести результаты этой функции. Вставляем пару строчек в то место, где хотим видеть их (обычно это бывает конец файла single.php, но я иногда вставляю код и в сайдбар:
cat_ID; show_previous_posts_from_category( $post->ID, $the_cat_id, 5); wp_reset_query(); ?>
За количество выводимых постов отвечает $post_num = 5 и $the_cat_id, 5.
очень полезная фишка, единственный вопрос. допустим у меня 5 записей. я использую этот код. к примеру, в 5-й записи покажет предыдущие 4. при этом больше не будут меняться эти ссылки при добавлении новых материалов?
то есть , ссылки у каждой записи на другие будут постоянны? если да, то цены вам нет))))
Ссылки у каждой записи меняться не будут. Еще раз: это вывод предыдущих постов из той же категории, основанный на ID кадой записи. Например, в категории опубликованы посты с ID 100, 120, 125, 148, 182, 168, 172, 173. Для записи с ID=120 появится список постов с ID 125, 148, 182, 168,172. То есть это настоящая перелинковка с постоянными ссылками.
ооо….это очень круто, товарищ!
возникли ошибки на нескольких сайтах, непонятно почему, не могу попасть в админку, с такой причиной
142 строка это как раз та , где начинается функция вставки
Ну так отмените изменения и проверьте, правильно ли вы вставляете этот код.
Здравствуйте!
А можно ли подобным образом вывести записи с нужным тэгом из определённой рубрики с известным id?
То есть, система определяется тэг записи и ищет такой же тэг среди записей в обозначенной рубрике. Находит – и выводит ссылку на эту найденную запись.
Спасибо!
Этот код показывает только предыдущие посты из данной рубрики. Теги при этом не учитываются. Думаю, что то, что вы хотите получить, с помощью этого кода сделать нельзя.
а нет на примете такого кода? ну или хотя бы каких-то намёток?
спасибо! :)
Добрый день!
У меня меняется кодировка на абракадабру при вставке этих кодов.
В чем может быть причина?
Есть ли разница в какое место в functions.php его вставлять.
Спасибо!
Разница есть. Попробуйте вставить этот код в самом начале, во второй строчке, сразу после <?php
Кстати, а как вы его копируете? Нужно подвести курсор к коду, и в появившейся панели выбрать view source – вот оттуда и копировать.
спасибо! попробую, отпишусь!
Да, так и правда получилось) спасибо!)
только видимо мне надо немого другое…
в сайдбаре список рубрик, заходишь в рубрику раскрывается сисок постов этой рубрики, заходишь в пост, этот список все также отрыт, заходишь в другую рубрику, для нее также раскрывается список постов, а старый список закрывается….
можете что нить посоветовать?:)
Может быть это вам нужно: https://n-wp.ru/krasivyj-vyvod-arxivov-soobshhenij-s-pomoshhyu-vidzheta-dtree/
я так понимаю это раскрывающийся список подрубрик, а мне нужен список постов.
Ну хорошо, а если я вот так покажу работу плагина:
супер!!! спасибо тебе большое!!!!
tiaurus, привет!!!
подскажи пожалуйста, можно ли разделить этот плагин на несколько виджетов. Т.е. чтобы н-р, часть выводилась в сайтбаре, часть на главной и т.п…. и у этих частей были разные настройки в админке…
а?)
Фича работает, но не так как нужно. Выводит случайные посты каждый раз! Как это можно поправить?
Вы уверены, что случайные? Этот код выводит предыдущие посты из этой же категории, по сравнению с текущей записью. То есть если запись опубликована 1 января, то код выведет список постов из этой же категории, опубликованные до 1 января.
только получается, что два раза выводиться ‘,the_time(‘j/m’),’ ‘.get_the_title().’
– пост, в котором находимся.
правильно? у меня так…
вау!!! супер! т.е. так он тоже работает???
отлично! спасибо) попробую – отпишусь))))
Всем привет!
Я автор этого, кода. Вот здесь улучшенный вариант: Перелинковка статей в WordPress (предыдущие записи из категории).
Отличный вариант! Только несколько непонятный для новичков. Наверное пора его оформить в виде отдельного плагина с разделом настроек?
Не стоит такая функция оформления как плагин. Хотя, можно, только у меня чет на это дело желания нет.
Всё отлично работает.
Только вот хоть убей- не могу изменить количество постов.
По умолчанию 5, а надо 3.Вроде всё сделал как написано выше.
Пните плиз что не так, по возможности подробно.
Вместо
поставьте
Так же вместо
поставьте
tiaurus
Спасибо.
Всё ОК.
Я забыл просто про эту строку
show_previous_posts_from_category( $post->ID, $the_cat_id, 3
гм,и снова количество постов не изменяется и выводятся все посты из категории.
даже при вставке кода пиведенного выше,без изменений,отображаются ВСЕ посты из категории.Изменение строчек не помогает.
Видимо есть конфликт с каким-то кодом внутри вашей темы, либо с каким-то плагином. Пробуйте с дефолтной темой.
Большой спасибо Kama,ваш код помог!!
Огромное спасибо! Сразу стал использовать но вот беда, заметил что комментарии выводятся от поста последнего в списке! Первичная the_ID() меняется на ID последней выведенной. Отсюда комментарии выводятся не из того поста которого надо а из последнего поста в похожих записях. Как после использования кода, записать в the_ID() ID именно начального поста?
Я немного изменил вторую часть кода – попробуйте, глюк должен исчезнуть.
AND wposts.ID get_results($sql, OBJECT);
в этой строке, двойную скобку поставить надо, потому что у Вас в этой строке:
$sql = “SELECT wposts.* – открывается скобка, соответсвенно, если я правильно понял Ваш код то надо, строку которую я привел в начале изменить на:
AND wposts.ID get_results($sql, OBJECT)”;
Простите, а можно все тоже самое только следующие посты получить? Вообще надо и пред идущие и следующие по одному лишь бы с одной категории стандартные методы не работаю т.к посты принадлежат многим категориям, надо выводить только те у которых у url прописана та же категория что и у просматриваемого поста.