Вывод списка похожих постов без плагина
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, что-нибудь в этом роде.
Успешного вам блоггинга!


Какая удача, что вы оставили комментарий в моем блоге – проверяя ссылку обнаружил инфу, которую уже неделю искал по поводу похожих постов. Спасибо:)
Хе-хе ))
Тебе спасибо за парсер!
(раньше были на ты))
Могу предложить Вам посетить сайт, на котором есть много статей по этому вопросу.
Что-то грузится плоховато у меня страница эта, или пров опять канал режит.