Задача: в wordpress’е после статьи выводить список «похожие статьи».
Если у двух статей совпадает один из тегов или категория, то это похожие статьи. Чем больше тегов совпадает, тем сильнее похожие. Вывести нужно пяток наиболее похожих. Если у двух статей одна «релевантность», то выше выводить более свежую.
По запросу «wordpress similar posts» можно найти множество плагинов данной тематики. У них у всех отличный код, подробная документация и богатый набор настроек. Единственный минус: вместо похожих постов они выводят какую-то рандомную хероту.
Так, как разбираться в функциях связанных с тегами и писать свой плагин нам лениво, то просто всё захардкорем. В файле темы, где выводится отдельный пост (обычно в wp-content/themes/mytheme/single.php
), в нужном месте говнокодим:
$limit = 5; $query = ' SELECT COUNT(*) AS `relev`, `p`.`ID`, UNIX_TIMESTAMP(`p`.`post_date`) AS `post_date`, `p`.`post_title`, `p`.`post_name` FROM `'.$wpdb->prefix.'term_relationships` AS `r` INNER JOIN `'.$wpdb->prefix.'posts` AS `p` ON `p`.`ID`=`r`.`object_id` WHERE `term_taxonomy_id` IN (SELECT `term_taxonomy_id` FROM `'.$wpdb->prefix.'term_relationships` WHERE `object_id`='.$post->ID.') AND `object_id` != '.$post->ID.' AND `post_type`="post" AND `post_status`="publish" GROUP BY `object_id` ORDER BY `relev` DESC, `p`.`post_date` DESC LIMIT '.$limit.' '; $simposts = $wpdb->get_results($query); if (count(simposts) > 0) { echo '<h3>Похожие записи</h3><ul class="similar-posts">'; foreach ($simposts as $p) { $url = 'http://example.com/blog/'.date('Y/m/d/', $p->post_date).$p->post_name.'/'; $title = htmlspecialchars($p->post_title, ENT_COMPAT, 'UTF-8'); echo '<li><a href="'.$url.'" rel="bookmark" title="Постоянная ссылка на '.$title.'">'.$title.'</a></li>'; } echo '</ul>'; } |
SQL-запрос ужасен и написан наскоро с предположением о дальнейшей оптимизации. Но, так, как он, совершенно неожиданно, выполняется за приемлимое время, то на оптимизацию забито. Нет ничего вечнее временного.
Вот так, всего за 5 минут мы позволили вордпрессу стать ещё говнокодистее. До новых встреч.
Вордпресс заменил в заголовке WordPress на WordPress. Я хуею.
vasa_c, 4.03.2013, 14:32
Билядь, он даже в камментах заменяет!
vasa_c, 4.03.2013, 23:03
> Вордпресс заменил…
Цензура? :-)
inst, 6.03.2013, 23:14
Cool!
qwerty, 3.05.2013, 11:49