Отличный способ внутренней перелинковки статей (для WordPress)

29 сентября 2009 г.

Отличный способ внутренней перелинковки статей (для WordPress) Евгений Самборский в своей статье “Как добиться хорошей индексации статей” рассказал про занятный способ внутренней перелинковки статей сайта.

Суть метода заключается в том, что на страницу со статьей помещается блок “Предыдущие из рубрики” в котором публикуется несколько предыдущих статей из той же самой рубрики в хронологическом порядке.

Процитирую Женю:

Под текстом каждой статьи на своих и клиентских сайтах я делаю список из 5-ти ранее опубликованных статей из рубрики. Замечу, что многие делают подобные списки, но зачастую в них ссылки на последние статьи. Я же линкую именно предыдущие, грубо говоря если у текущей статьи ID = 10, то в списке предыдущих будут статьи с ID 9,8,7,6,5. Каждая статья получает минимум 4 вечных внутренних ссылки.

Естественно, после прочтения статьи я загорелся желанием реализовать такую полезную штуку на WordPress’е. И, естественно, я ее сделал.

Более того, по подсказке Дэна я пошел еще дальше, чем задумывал первоначально - сделал кольцевую перелинковку. Для наглядности пример - в рубрике есть 10 статей, и в списке мы выводим 5 статей. При заходе в 3-ю статью, список “Предыдущие из рубрики” будет содержать ссылки на статьи 2, 1, 10, 9, 8.

В результате каждая статья рубрики получает на себя одинаковое количество ссылок из той же самой рубрики.

“Давай уже, Димокс, не томи, выкладывай код на стол!” (голос из зала =).

Окей, выкладываю. Он, кстати говоря, получился довольно монструозный:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?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 раза (обратите на это внимание) и имеет следующий вид:

1
<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!), который, по сравнению с моим вариантом, берет из БД только те посты, которые появятся в списке (в моем варианте сначала считываются ВСЕ записи текущей рубрики, и только потом происходит выборка).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?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 - бесплатное продвижение сайтов, дополнительный заработок без комиссий.

Теги: , , , , автор: Dimox | рубрика SEO

Комментарии (126): »

  1. Поставил, все отлично работает. Если не секрет, подскажите, какой плагин у вас стойт слева экрана с кнопками соцсетей.

    @
  2. спасибо за код, пригодился!

  3. Помогите плиз советом, реализовал такой код у себя на сайте и в той статье где оно есть, не отображаются ниже комментарии, после того как код убираю, отображаются. Очень прошу помощи, самому разобраться не получилось :(

    @

Присоединяйтесь к обсуждению!

Отправляя кoммeнтapий, вы автоматически принимаете правила кoммeнтиpoвaния на этом блоге.

Правила кoммeнтиpoвaния на блоге dimox.name:

  1. Первый кoммeнтapий всегда проходит премодерацию.
  2. В поле "URL блога" можно указывать только ссылку на главную страницу вашего блога. Ссылки на прочие веб-ресурсы (в том числе блоги/сплоги, созданные не для людей) будут удалены.
  3. Запрещается использовать в качестве имени комментатора слоганы/названия сайтов, рекламные фразы, ключевые и т.п. слова. В случае несоблюдения этого условия имя изменяется по усмотрению владельца блога. Просьба указывать нормальное имя или ник.
  4. Весьма вероятно, что короткий и неинформативный кoммeнтapий вида "Спасибо!", "Интересная статья", будет удален. Исключение составляют знакомые автору блога комментаторы.
  5. Комментарии не по теме удаляются.

Подписаться, не комментируя
  • Похожие статьи
  • Предыдущие из рубрики