Онлайн заработок, создание и монетизация сайтов, веб-разработка, SEO и SMO продвижение, фриланс, партнерки, полезные сервисы вебмастерам, блоггинг.

Главная » WordPress » Самые комментируемые и случайные посты в Wordpress блоге

Самые комментируемые и случайные посты в WordPress блоге

Продолжаем рассмотрение полезных функций для блогов в 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.

30.11.09

Категории: WordPress, Блоггинг.

Теги: , , , , ,

52 Comments
  1. alex

    Хах, привет, Тод. Уже не помню, под каким мылом задавал вопрос. Приятно удивила весточка на мыло о новых комментариях.
    Спасибо, что живой :)
    Напиши пост о былых временах сеошных — сапа и пр. Брось ссылочку мне на мыло — с удовольствием почитаю ))

  2. Tod

    Alex, привет, недавно в твиттере писал, что избавился от последнего сайта в Сапе) Реально былые времена позади, нужно приходить к чему-то новому. Часть новостей «о жизни и вообще» можно почитать в итоговом посте за прошлый год.

Добавить комментарий

Ваш e-mail не публикуется. Обязательные поля помечены *
Если вы комментируете впервые, то текст будет отправлен на модерацию.