Самые комментируемые и случайные посты в 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.
Хах, привет, Тод. Уже не помню, под каким мылом задавал вопрос. Приятно удивила весточка на мыло о новых комментариях.
Спасибо, что живой :)
Напиши пост о былых временах сеошных — сапа и пр. Брось ссылочку мне на мыло — с удовольствием почитаю ))
Alex, привет, недавно в твиттере писал, что избавился от последнего сайта в Сапе) Реально былые времена позади, нужно приходить к чему-то новому. Часть новостей «о жизни и вообще» можно почитать в итоговом посте за прошлый год.