Самые комментируемые и случайные посты в WordPress блоге
Monday, 30 Nov 09 в 17:46
Продолжаем рассмотрение полезных функций для блогов в WordPress. В прошлый раз я рассказывал про последние посты и комментарии блога, популярные статьи. Сегодня будем эту тему развивать – я публиковал подсказки как отображать самые популярные посты по количеству просмотров и некому комплексному показателю, состоящему из нескольких величин. Но, если немного призадуматься, популярность постов может также определять активностью их обсуждения – то есть количеством комментариев, которые оставили посетители блога. Итак, встречайте:
Самые комментируемые посты
В сети было найдено весьма хорошее решение для этой задачи, точнее – даже два варианта. Первый способ – более простой, выводит список самых комментируемых постов блога.
<?php $result = $wpdb->get_results("SELECT comment_count,ID,post_title FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 10"); foreach ($result as $topten) { $postid = $topten->ID; $title = $topten->post_title; $commentcount = $topten->comment_count; if ($commentcount != 0) { ?> <li><a href="<?php echo get_permalink($postid); ?>" title="<?php echo $title ?>"><?php echo $title ?></a></li> <?php } } ?>
Максимум, что можно здесь подправить – количество постов, для этого обратите внимание на строку с текстом LIMIT 0 , 10 и, собственно, последнюю цифру. Список выводится с помощью тега LI – тут все вроде как стандартно.
Если вам достаточно простого списка самых комментируемых постов, то первый вариант – то, что нужно. Для ищущих гибкость настройки советую обратить внимание на следующий код. Он состоит из двух частей – находите в списке файлов шаблона «функции темы» functions.php и в нем добавляете следующие строки:
<?php function most_popular_posts($no_posts = 5, $before = '<li>', $after = '</li>', $show_pass_post = false, $duration='') { global $wpdb; $request = "SELECT ID, post_title, COUNT($wpdb->comments.comment_post_ID) AS 'comment_count' FROM $wpdb->posts, $wpdb->comments"; $request .= " WHERE comment_approved = '1' AND $wpdb->posts.ID=$wpdb->comments.comment_post_ID AND post_status = 'publish'"; if(!$show_pass_post) $request .= " AND post_password =''"; if($duration !="") { $request .= " AND DATE_SUB(CURDATE(),INTERVAL ".$duration." DAY) < post_date "; } $request .= " GROUP BY $wpdb->comments.comment_post_ID ORDER BY comment_count DESC LIMIT $no_posts"; $posts = $wpdb->get_results($request); $output = ''; if ($posts) { foreach ($posts as $post) { $post_title = stripslashes($post->post_title); $comment_count = $post->comment_count; $permalink = get_permalink($post->ID); $output .= $before . '<a href="' . $permalink . '" title="' . $post_title.'">' . $post_title . '</a> (' . $comment_count.')' . $after; } } else { $output .= $before . "None found" . $after; } echo $output; } ?>
Если functions.php у вас нет, то можно добавить этот код в самый конец файла header.php. Как мы видим в описании функции most_popular_posts есть 5 переменных – no_posts задает количество выводимых постов, before и after определяет окружающие теги для каждой записи (не удивительно, что там задан тег LI), а также show_pass_post, отвечающая, как я понял, за отображение запароленых потов и duration, где вы можете задать количество дней за которые хотите отбирать эти самые комментируемые посты (например, за последний месяц – 31 или любое другое значение).
Чтобы отобразить список самых комментируемый статей вашего блога нужно добавить в требуемое место шаблона вызов функции:
<?php most_popular_posts(); ?>
После этого список должен отобразится в блоге. Кстати, возле ссылок на посты в скобках будет также указываться количество комментариев.
Случайный (рандомные) посты в блоге
В принципе, для перелинковки в блогах (да и просто сайтах на wordpress) хороши любые методы. Я как-то рассматривал плагин Simple Tags и вывод связных постов по теме для конкретной статьи. Кроме этого можно также выводить и случайные посты для пользователей чтобы они смогли почитать еще некоторые материалы вашего блога. Выборка при этом производится случайным образом (рандомно):
<div id="random"> <?php $randompost = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY RAND() LIMIT 5"); if ($randompost) { foreach ($randompost as $post) { $ID = $post->ID; $postid = get_post($post->ID); $title = $postid->post_title; ?> <li><a href="<?php echo get_permalink($postid); ?>" title="<?php echo $title ?>"><?php echo $title ?></a></li> <?php } } ?> <div class="more"><a href="javascript:location.reload()" target="_self">(показать другие)</a></div> </div>
За код просьба сильно не ругать, в интернете более-менее адекватного примера я не нашел, пришлось сочинять самому:) В общем, вкратце что сказать по коду – здесь цифра в запросе LIMIT 5 означает количество постов, ее соответственно можно менять. В конце есть блок с ссылкой показать другие, которая перегружает страницы и в блоке рандомных постов пользователь увидит новые случайные ссылки на статьи. В принципе, это не обязательная часть кода, поэтому, если вам не нужна, ее можно убрать.
Вообще, как я уже говорил в прошлой статье по функциям wordpress – для решения тех или иных задач есть разные варианты. Так, например, случайные посты можно выводить с помощью плагина или функции query_posts – тут уж как кому больше нравится. Если внимательно изучить код и структуру (характер) запросов $wpdb->get_results, то можно выводить практически любую информацию из базы данных:)
P.S. Постовой. Купите своей девушке духи от ведущих европейских брендов.
Элитная парфюмерия и духи в Киеве.
Sea container shipment and shipping agency – uni-orient shipping agency ltd.

В процессе работы с системой для блогов wordpress я сталкивался с разными ситуациями и заданиями. Некоторые моменты хотелось бы сегодня рассмотреть, речь пойдет о готовых решения (хаках) для системы, которые позволяют выводить списки сообщений по определенному признаку. Сюда, например, я бы отнес последние посты блога, последние комментарии, самые популярные, комментируемые или случайные посты. Эти списки могут использоваться по двум причинам – во-первых, для поисковиков получите что-то вроде дополнительной внутренней перелинковки. Во-вторых, для читателей, которые впервые попали на ваш блог, будет полезно для его оценки взглянуть на некоторые статьи проекта (допустим, самые популярные). В общем, вещи не то чтобы крайне важные, но весьма полезные для любого блога. Чтобы узнать, как такое добавить к себе на проект, читаем дальше.
В одном из предыдущих постов я рассказывал о своем новом совместном проекте под названием Банкомёт, публикуется информация про разные 


