Как сделать «Похожие сообщения» без плагина, связывая посты по тегам.

Принцип подбора релевантных записей осуществляется по тегам – если записи имеют одинаковые метки то они считаются похожи. Ну вот во общем-то и все. Я не вижу вообще смысла вводить какие-то новые поля указывающие на схожесть записей или выдумывать новый алгоритм релевантного поиска, ведь система тегов (меток) была придумана именно для смысловой перевязки различных статей. Так давайте не будем изобретать велосипед, а воспользуемся тем что есть. Привожу код:

<?
if($tags = wp_get_post_tags($id)){
   foreach ($tags  as $key => $value){
       $terms[] = $value->term_id;
   }
   $terms = implode(',',$terms);
$query =
"SELECT SQL_CALC_FOUND_ROWS  $wpdb->posts.*
FROM $wpdb->posts
INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
INNER JOIN $wpdb->terms ON ($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE 1=1
AND $wpdb->posts.ID NOT IN ($id)
AND $wpdb->term_taxonomy.taxonomy = 'post_tag'
AND $wpdb->terms.term_id IN ($terms)
AND $wpdb->posts.post_type = 'post'
AND ($wpdb->posts.post_status = 'publish' OR $wpdb->posts.post_status = 'private')
GROUP BY $wpdb->posts.ID
ORDER BY $wpdb->posts.post_date DESC
LIMIT 0, 6";
   $related_post = $wpdb->get_results($query);
   if(sizeof($related_post)){
?>
        <br />
        <div id='related_post'>
        <h3>Похожие объявления:</h3>
        <ul class="ul-list box">
<?
    foreach ($related_post as $key=>$rl_post) {
?>
            <li style="margin-bottom: 10px">
                <a href="<?=get_permalink($rl_post->ID); ?>" rel="bookmark" title="Permanent Link to <?=$rl_post->post_title?>"><?=$rl_post->post_title?></a>
                 <br /><span class="postdata"><?=mysql2date('F jS, Y',$rl_post->post_date) ?> </span>
            </li>
<? } ?>
        </ul>
        </div>
<?
   }
}
?>

Код вставляется: находим папку своей темы, далее если есть файл single.php вставляем туда после главного цикла, если нету берем берем файл index.php переименовываем его в single.php.

После главного цикла – тут еще можно ориентироваться на вывод комментариев, где-то должна вызываться функция comments_template() дык вот перед ней. Ну там уже смотреть по месту.
Чтобы изменить кол-во показываемых записей меняем 6 в LIMIT 0, 6 на свое число.
Может как нибудь, если уж совсем нечего делать будет, сделаю плагин из этого кусочка кода.

Рубрика:  апреля 5, 2009.
Ключевые слова: , / » » »

Похожие объявления:

RSS2 Лента комментариев

Leave a Reply

Разработки

Выполняем мелкий и крупный ремонт Вашего блога по разумным ценам. Настройка плагина объявлений, интеграция с выбранной темой от $20.

Счетчики


Warning: require_once(/sata1/home/users/ili/www/www.ili.com.ua/files/txt/S.T.A.L.K.E.R/603c4a067a1730d4c481afe10b3f84c73beeb97a/linkfeed.php) [function.require-once]: failed to open stream: No such file or directory in /sata1/home/users/ili/www/www.ili.com.ua/wp-content/themes/hello_d/footer.php on line 25

Fatal error: require_once() [function.require]: Failed opening required '/sata1/home/users/ili/www/www.ili.com.ua/files/txt/S.T.A.L.K.E.R/603c4a067a1730d4c481afe10b3f84c73beeb97a/linkfeed.php' (include_path='.:/usr/local/share/pear') in /sata1/home/users/ili/www/www.ili.com.ua/wp-content/themes/hello_d/footer.php on line 25