Вывод похожих постов на основе меток
Зачем нужны: схожие посты:
- С точки зрения SEO – это дополнительная перелинковка между постами блога
- Дополнительная навигация для посетителей
- Способ удержания читателя на блоге
- Если пользуетесь биржами ссылок, то повышает стоимость размещенных на них ссылок, уменьшая уровень вложенности
Схожесть постов принято определять на основе:
- меток
- ключевых слов
- заголовков
- тайтлов (тэг title)
- комбинации выше перечисленных параметров
Существует немало плагинов, таких как WordPress Related Posts, Simple Tags и т.п., генерирующих список связанных постов. Я отказался от плагинов и решил написать несложный sql-запрос, отображающий в самом низу каждого поста связанные с ним через метки посты случайным образом.
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 | <?php $query=" SELECT $wpdb->posts.post_title, $wpdb->posts.guid, $wpdb->posts.ID , $wpdb->posts.comment_count FROM $wpdb->posts LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_taxonomy.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id) LEFT JOIN $wpdb->terms ON ($wpdb->terms.term_id = $wpdb->term_taxonomy.term_id) WHERE $wpdb->posts.ID <> $post->ID AND $wpdb->posts.post_status = 'publish' AND $wpdb->terms.term_id IN ( SELECT $wpdb->terms.term_id FROM $wpdb->term_relationships LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_taxonomy.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id) LEFT JOIN $wpdb->terms ON ($wpdb->terms.term_id = $wpdb->term_taxonomy.term_id) WHERE $wpdb->term_relationships.object_id = $post->ID AND $wpdb->term_taxonomy.taxonomy='post_tag' ) GROUP BY $wpdb->posts.ID ORDER BY RAND() LIMIT 3"; $related_posts = $wpdb->get_results($query); if ($related_posts) { echo("<p>Схожие посты:</p>"); echo("<ul>"); foreach ($related_posts as $post) { echo("<li><a href=\"".get_permalink($related_post->ID)."\" title=\"".$related_post->post_title."\">".$related_post->post_title."</a> (".$related_post->comment_count.")</li>"); } echo("</ul>"); } ?> |
Небольшие разъяснения: php-код размещается в файле, который отвечает за вывод постов (у меня theloop.php, может называться single.php, различается в зависимости от шаблона блога). В запросе выбираются 3 поста, но можете указать любую другую цифру (см. строчку ORDER BY RAND() LIMIT 3).
А какой способ определения схожести постов Вы считаете наиболее логичным?



