Сейчас я вам все расскажу

Вывод списка похожих постов без плагина

Posted: Февраль 13th, 2010 | Author: Golan | Filed under: Wordpress | Tags: , | 4 Comments »

Плагины – зло.

Они грузят базу и жрут ресурсы.

Как только есть возможность заменить какой-нибудь плагин функцией или хаком, я это делаю.

Например, почему бы не заменить плагин, выводящий список похожих постов? Я надеюсь, у вас на каждом блоге есть такой. У меня тоже на каждом, ну вот кроме этого. На этом пока нет, потому что постов еще мало. Но скоро поставлю ))

Зачем нужно выводить похожие посты?

По двум причинам.
Первая – для людей: так вы побуждаете посетителя прочитать еще какой-нибудь пост на вашем сайте, пройти дальше по ссылкам.
Вторая – для СЕО: вывод похожих постов критически необходим для внутренней перелинковки. Увеличиваеся количество внутренних ссылок, ускоряется индексация непопулярных страниц.

В общем, такой плагин необходим как для СДЛ, так и для сплогов.

Плагинов таких куча: Related Posts, YARPP…
Но давайте все же поищем хак.

Нашли у Александра Волкова, автора отличного блога alexvolkov.ru. Вот этот хак.
Но вот беда: если этот хак вставить в шаблон поста перед комментариями, где обычно ему и место, то вместо комментов к текущему посту выводятся комменты к последнему посту из списка похожих постов.
В комментах к посту на wprecipes.com, из которого Алекс и взял эту идею, один умный человек посоветовал добавить в конец кода строчку

wp_reset_query();

По идее, она должна все обнулить и решить проблему. И там в комментах пишут, что это помогает.

Но вот на одном из моих блогов это не помогло.

Как же мы решили проблему?

Сохраняем id поста, а в конце делаем обратную операцию.
Добавили в начало кода

$mpid = $post->ID;

а в конец

$post->ID = $mpid;

Получилось немного по-партизански, но что делать. Главное – все заработало ))

Вот полный код нашего нового хака:

<?php if(is_single()){?>
<div id=”related”>
<?php
$mpid = $post->ID;
$tags = wp_get_post_tags($mpid);
if ($tags) {
echo ‘<h3>Related Posts:</h3>’;
$first_tag = $tags[0]->term_id;
$args=array(
‘tag__in’ => array($first_tag),
‘post__not_in’ => array($mpid),
’showposts’=>4,
‘caller_get_posts’=>1
);

$my_query = new WP_Query($args);

if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href=”<?php the_permalink() ?>” rel=”bookmark” title=”Permanent Link to <?php the_title_attribute(); ?>”><?php the_title(); ?></a></p>
<?php
endwhile;
}

} //if tags

?>
</div>
<?php
$post->ID = $mpid;
} // if single

?>

Вместо <h3> можете написать что-то свое, как вам там надо оформить заголовок.

Вывод ссылок тоже оформляете как вам нужно, у меня например он выводится списком:

<ul><li><a href=”<?php the_permalink() ?>” rel=”bookmark” title=”Permanent Link to <?php the_title_attribute(); ?>”><?php the_title(); ?></a></li></ul>

И кстати: если у вас не сплог, а СДЛ, то вместо стандартного Related Posts лучше писать что-нибудь побуждающее посетителя щелкнуть по этим ссылкам, например: You may also be interested to read these articles, что-нибудь в этом роде.

Успешного вам блоггинга!

Расскажите всем

4 Comments on “Вывод списка похожих постов без плагина”

  1. 1 Sjs said at 13:20 on Февраль 20th, 2010:

    Какая удача, что вы оставили комментарий в моем блоге – проверяя ссылку обнаружил инфу, которую уже неделю искал по поводу похожих постов. Спасибо:)

  2. 2 Golan said at 13:30 on Февраль 20th, 2010:

    Хе-хе ))
    Тебе спасибо за парсер!
    (раньше были на ты))

  3. 3 Панарин said at 2:03 on Май 20th, 2010:

    Могу предложить Вам посетить сайт, на котором есть много статей по этому вопросу.

  4. 4 nickyis said at 5:33 on Июль 1st, 2010:

    Что-то грузится плоховато у меня страница эта, или пров опять канал режит.


Leave a Reply