Отличный способ внутренней перелинковки статей (для WordPress)
Евгений Самборский в своей статье “Как добиться хорошей индексации статей” рассказал про занятный способ внутренней перелинковки статей сайта.
Суть метода заключается в том, что на страницу со статьей помещается блок “Предыдущие из рубрики” в котором публикуется несколько предыдущих статей из той же самой рубрики в хронологическом порядке.
Процитирую Женю:
Под текстом каждой статьи на своих и клиентских сайтах я делаю список из 5-ти ранее опубликованных статей из рубрики. Замечу, что многие делают подобные списки, но зачастую в них ссылки на последние статьи. Я же линкую именно предыдущие, грубо говоря если у текущей статьи ID = 10, то в списке предыдущих будут статьи с ID 9,8,7,6,5. Каждая статья получает минимум 4 вечных внутренних ссылки.
Естественно, после прочтения статьи я загорелся желанием реализовать такую полезную штуку на WordPress’е. И, естественно, я ее сделал.
Более того, по подсказке Дэна я пошел еще дальше, чем задумывал первоначально – сделал кольцевую перелинковку. Для наглядности пример – в рубрике есть 10 статей, и в списке мы выводим 5 статей. При заходе в 3-ю статью, список “Предыдущие из рубрики” будет содержать ссылки на статьи 2, 1, 10, 9, 8.
В результате каждая статья рубрики получает на себя одинаковое количество ссылок из той же самой рубрики.
“Давай уже, Димокс, не томи, выкладывай код на стол!” (голос из зала =).
Окей, выкладываю. Он, кстати говоря, получился довольно монструозный:
<?php
$li = 5; // сколько ссылок показывать в списке
$postID = $post->ID;
$postDate1 = get_the_time('YmdHis','','',false);
$cat = get_the_category(); $cat = $cat[0]; $cat = $cat->cat_ID;
$catQuery = new WP_Query('showposts=-1&cat='.$cat);
$i = 0;
if ($catQuery->have_posts() && $catQuery->post_count > 1) :
?>
<ul>
<?php
while ($catQuery->have_posts()) : $catQuery->the_post();
$postDate2 = get_the_time('YmdHis','','',false);
if ($postDate2 < $postDate1 && $post->ID != $postID) {
$i++;
if ($i <= $li) {
?>
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
<?php
}
}
endwhile;
?>
<?php
$posts = $li - $i;
$cat_count = get_category($cat)->category_count;
?>
<?php
if (($cat_count - 1) > $i) {
if ($posts > 0) {
$temp_query = $wp_query;
if (($cat_count - 1) < $li) $posts = $cat_count - 1 - $i;
query_posts('showposts='.$posts.'&cat='.$cat);
if (have_posts()) : while (have_posts()) : the_post();
?>
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
<?php
endwhile; endif;
$wp_query = $temp_query;
}
}
?>
</ul>
<?php endif; wp_reset_query(); ?>
Код необходимо запихнуть в файл single.php
. Если вы не разбираетесь в шаблонах WordPress, то лучше вообще ничего не трогать.
Шаблон ссылки встречается в этом коде 2 раза (обратите на это внимание) и имеет следующий вид:
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
В этом шаблоне можно использовать все те же php-теги, которые используются в стандартном WordPress-цикле.
Код проверялся только на WordPress 2.8.4, поэтому работу в других версия я не гарантирую.
Живой пример вы можете увидеть непосредственно на данном блоге во вкладке “Предыдущие из рубрики”, которая находится под каждой статьей.
P.S. Кстати, по аналогии можно сделать внутреннюю перелинковку статей и для блога в целом, а не только в пределах рубрик.
Update 29.11.09
В комментариях подсказали более правильный вариант кода для вывода списка (спасибо пользователю Kama!), который, по сравнению с моим вариантом, берет из БД только те посты, которые появятся в списке (в моем варианте сначала считываются ВСЕ записи текущей рубрики, и только потом происходит выборка).
<?php
function show_previous_posts_from_category ($the_post_id, $the_category_id = 0, $post_num) {
$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 < '$the_post_id'
ORDER BY wposts.ID DESC
LIMIT $post_num";
$result = $wpdb->get_results($sql, OBJECT);
global $post;
?>
<ul>
<?php
foreach ($result as $post) {
setup_postdata($post);
?>
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
<?php
$num++;
$save_ids[] = $post->ID;
}
if ( $num < $post_num || !$result ) {
$need_more = $post_num-$num;
$save_ids[] = $the_post_id;
$save_ids = join (',', $save_ids);
$more_posts = get_posts("numberposts=$need_more&category=$the_category_id&exclude=$save_ids");
foreach ($more_posts as $post){
setup_postdata($post);
?>
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
<?php
}
}
?>
</ul>
<?php } ?>
<?php
$the_cat = get_the_category();
$the_cat_id = $the_cat[0]->cat_ID;
show_previous_posts_from_category($post->ID, $the_cat_id, 5);
wp_reset_query();
?>
Количество ссылок указывается в самой последней строке кода. Шаблон ссылки также находится в двух местах.
* * *
Система обмена cсылками нового поколения LinkToLink.ru – бесплатное продвижение сайтов, дополнительный заработок без комиссий.
Комментарии (158)
Фуу, намучился я с этими вашими кодами, чуть сайт не снес…. )))) Но все-таки поставил как надо, поэтому спасибо вам большое!
всем привет!
подскажите пожалуйста какой код куда нужно вставлять или что на что заменить?
спасибо
предыдущие посты – это хорошо.
а как насчёт отображения следующих по списку постов (т.е. тех,которые наоборот новее)?
Поставил, все отлично работает. Если не секрет, подскажите, какой плагин у вас стойт слева экрана с кнопками соцсетей.
http://dimox.name/socializ-floating-panel/
спасибо за код, пригодился!
Помогите плиз советом, реализовал такой код у себя на сайте и в той статье где оно есть, не отображаются ниже комментарии, после того как код убираю, отображаются. Очень прошу помощи, самому разобраться не получилось :(
Попробуйте установить код из этой статьи.
Спасибо, попробую!
А подскажите кто-нибудь, как можно данный код интегрировать в плагин Wp-Thumbie, чтобы возле ссылок на статьи отображались миниатюры? В самом плагине рекомендованные статьи указываются по похожим словам в тексте и заголовках, что не очень хорошо и больше никаких настроек нет..
Может кто знает, как реализовать перелинковку с миниатюрами, но по принципу Dimox’a, только последние с круговой перелинковкой?.. Думаю, это многим пригодилось бы.
Епта! У меня не пашет просто тупо не выводит ничего,
Не подскажешь в чем может быть дело может в базе данных таблицы не совпадают?
В твоем коде нет кода перелинковки.
Да нет я его ставил там где уже начинается подключение комментов, просто тупо ничего не выводит может идет перехват переменных?
Его вызывать не надо эту функцию?
Вот черт теперб работает! Че вечером значит пахать не хочет а с утра как миленький заработал! Спасибо за код!)))
Вот еще проблема. Я вывожу картинки и частично текст но он выводит по неправильному порядку.
Т.е картинка принадлежит другому посту а он ее выводит совсем в другом посте.
Вот код
Извини за предыдущий коммент сам сделал уже ))
А подскажите кто-нибудь, как можно вывести в этом коде миниатюру записи? Ну и может реально выводить первое предложение, как в плагине WP-Thumbie, только там перелинковки нет.
На
ТОлько после начала функции добаваь
Окончательный вариант )))
Спасибо, Ринат! Все получилось)
Пример реализации кода с миниатюрами _http://smileaf.org/politika/v-molodezhnuyu-versiyu-gorsoveta-projdut-40-chelovek.html
Всегда пожалуйста ! )
Ринат, большое спасибо. Подскажите пожалуйста как уменьшить количество выводимого текста из предыдущей статьи?
Мне кажется вы не правы и буду рад, если вы докажете мне обратное. Я также написал Каме, интересно и его мнение.
Известно, что вес по ссылкам начинает полноценно передаваться лишь через несколько месяцев после простановки. Это было сделано для борьбы с продажными ссылками аля Sape, которые выставляются на несколько дней, а потом удаляются.
Итак, вы говорите о том, что допустим когда зайходим на 3-ю статью будут показаны ссылки на: 2,1,10,9 статьи. Соответственно, на 1-ой статье будут показаны 10,9,8,7 статьи. Для необновляющегося сайта это великолепное кольцо.
Но! Допустим, прошло пару месяцев и у вас появилось 5 новых статей. Теперь первая статья ссылается на 15,14,13,12 статьи. Получается, что все ссылки поменялись и теперь вес передается им. Поисковики-то еще не успели учесть те ссылки, а тут уже новые… Таким образом, кольцо разывается и формируется новое, для полноценной работы которого нужно несколько месяцев.
Но у вашего кольца соответственно нет нескольких месяцев – схема не работает. Где я не прав?
Это актуально только для первых 5 статей (конечно, если выводится 5 предыдущих). Для всех остальных статей список всегда будет постоянным.
Учитывая, что на сайте, как правило, значительно больше, чем 5 статей, данную проблему считаю не существенной.
Но ведь теряется смысл кольца, при котором вес перетекает по кругу! Понятно, что статья 10 фиксировано ссылается на статью 9,8,7,6, но то же самое делает и модуль “Предыдущие статьи”. А статья 10, а потом 15 не получает веса 1-ой статьи и потому не передает этот вес дальше по кругу.
И соответственно при 15 статьях 10-ая,9,8,7,6 и т.п. варятся в собственном соку, абсолютно ТОЧНО ТАК ЖЕ как при модуле “Предыдущие статьи”. И потому, мне кажется, смысла в кольце, описанном в данной вашей статье нет!
Ну или я не прав и данная схема чем-то лучше “Предыдущих статей”?
P.S. Учитывая, что если поставить 5 статей, то ссылка на одну и ту же статью будет в 5 других, в одном месте и с одинаковым анкором – поисковик тупо может посчитать его за сквозняк и понизить вес, передаваемый по таким ссылкам.
P.P.S. Учитывая, что все ссылки идут с одинаковым анкором, еще и совпадающим с названием, ну вы понимаете как к такой “ссылочной массе” отнесутся поисковики… :)
Такой вопрос:
А стоит ли в конце поста выводить рандомно записи (их title) на другие посты?
Помогите сделать как у вас на сайте блок как на скрине http://savepic.su/3272806.jpg
Что-то не работает на wp 3.8 или я что-то делаю не так?(
У меня на 3.8 работает без проблем.
Всем привет, в общем бился 2 дня над текущим кодом… подключал с миниатюрами. Все дело в том, что не смог победить кое-какие стили. То есть если блок перелинковки отображался корректно и красиво, то где-нить в другом месте стили отваливались… Решил с помощью добавления таблицы может и старомодно, но работает _http://ladymsk.com/xulaxup-dlya-poxudeniya.html
У кого если существует такая проблемка, то вот код:
Подскажите пожалуйста как подключить транзитное кеширование к функции вывода предыдущих постов из категории?
Появилась проблема с нагрузкой на одном блоге, в одной категории несколько тысяч постов.
Решил проблему исключением из запроса индексов для таблицы wp_posts
заменил строку:
FROM $wpdb->posts wposts
на
FROM $wpdb->posts wposts IGNORE INDEX (PRIMARY,type_status_id_date)
костыль конечно, но помог, снизил время выполнения запроса с 5 секунд до 0.5
актуально для сайтов с большим количеством постов, у моего в проблемной рубрике уже более 70000 постов, отсюда такая нагрузка.
Подскажите, как выводить по такому же принципу посты из указанной таксономии, а в случаи если пост не состоит в таксономии, тогда выводились предыдущие посты из категории.
Хотя, подскажите, как вывести посты из указанной таксономии, а остальное я попробую сделать сам,
Реализовывал тоже похожую штуку. Вроде работает на ура, пока не пробовал менять ибо и так все устраивает.
Добрый день. Подскажите пожалуйста, нужно похожие статьи вывести внутри статьи. Есть код, с помощью которого я ставлю рекламный текст внутрь статьи, а вот похожие записи с помощью кода не получается показать внутри статьи.
chrome не дает использовать код “ERR_BLOCKED_BY_XSS_AUDITOR”
Здравствуйте, Дмитрий.
Искренняя благодарность Вам за сайт и учение, в которое Вы нас посвящаете.
Позвольте задать Вам вопрос, касающийся актуальности внутренней кольцевой перелинковки, о которой идёт речь в настоящей публикации.
Примерно 3 недели назад на своём авторском ресурсе я интегрировал функцию. Вывожу внутри раздела по 5 предыдущих записей.
Многое ли изменилось с 2009 года?
1. В настоящее время, насколько эффективна данная перелинковка?
2. Не попадёт ли ресурс за это под санкции?
3. Дмитрий, подскажите, “на пороге” 2020 года, можно ли таким способом поднять посещаемость по низкочастотным запросам в достаточно крупных разделах? Если да, то примерно через какой промежуток времени стоит ожидать положительных результатов?
Заранее благодарен Вам за ответы.
С уважением, Эдвин.
Не могу ничего сказать по вопросам. Экспериментов не проводил.