Вывод самых последних и самых комментируемых записей в WordPress

Most commented and latest posts in WordPressС ростом количества записей в блоге возникает желание дополнительно отображать на главной странице интересные посты. Критериев интересности немало, это может быть количество просмотров пользователями, количество оставленных комментариев, субъективная оценка автора. Такие блоки с постами служат элементом навигации, помогают удержать пользователя на сайте, и дополнительно перелинковывают записи.

Сегодня рассмотрим как в WordPress с помощью sql-запросов реализовать:

  1. Вывод самых комментируемых постов
  2. Вывод самых последних постов
  3. Вывод самых последних комментируемых постов

Вывод самых комментируемых постов. Для этого необходимо разместить в сайдбаре (sidebar.php) следующий код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<ul id="most-commented">
<?php 
//mc - most commented
$most_commented_posts = $wpdb->get_results("
             SELECT `comment_count`,`ID`,`post_title` 
             FROM $wpdb->posts WHERE `comment_count` > 0 
             AND `post_type`= 'post' 
             AND `post_status` = 'publish' 
             ORDER BY `comment_count` DESC LIMIT 10");
 
foreach ($most_commented_posts as $mc_post) 
	{
	if ($mc_post->comment_count != 0) 
		{ ?>
		<li>
		<a href="<?php echo get_permalink($mc_post->ID); ?>" 
                 title="<?php echo $mc_post->post_title ?>">
                <?php echo $mc_post->post_title ?>
                </a> (<?php echo $mc_post->comment_count ?>)
		</li>
<?php           } 
	} 
?>
</ul>

Возможно понадобится отображать последние добавленные записи (посты), для этого код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<ul id="latest">
<?php 
//l - latest
$latest_posts = $wpdb->get_results("
             SELECT `comment_count`,`ID`,`post_title` 
             FROM $wpdb->posts WHERE `post_type`= 'post' 
             AND `post_status` = 'publish' 
             ORDER BY `post_date` DESC LIMIT 10");
 
foreach ($latest_posts as $l_post) 
	{
	if ($l_post->comment_count != 0) 
		{ ?>
		<li>
		<a href="<?php echo get_permalink($l_post->ID); ?>" 
                title="<?php echo $l_post->post_title ?>">
                <?php echo $l_post->post_title ?>
                </a> (<?php echo $l_post->comment_count ?>)
		</li>
<?php             } 
	} 
?>
</ul>

Если вдруг нужно отобразить свежедобавленные записи с максимальным количеством комментов (сортировка по дате И количеству комментариев). По-сути объединение двух предыдущих запросов:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<ul id="latest-most-commented">
<?php 
//mc - most commented, l - latest
$latest_most_commented = $wpdb->get_results("
             SELECT `comment_count`,`ID`,`post_title` 
             FROM $wpdb->posts WHERE `comment_count` > 0 
             AND `post_type`= 'post' AND `post_status` = 'publish' 
             ORDER BY `comment_count` DESC, `post_date` DESC LIMIT 10");
 
foreach ($latest_most_commented as $l_mc_post) 
	{
	if ($l_mc_post->comment_count != 0) 
		{ ?>
		<li>
		<a href="<?php echo get_permalink($l_mc_post->ID); ?>" 
                title="<?php echo $l_mc_post->post_title ?>">
                <?php echo $l_mc_post->post_title ?>
                </a> (<?php echo $l_mc_post->comment_count ?>)
		</li>
<?php             } 
	} 
?>
</ul>

Во всех трех запросах отображается десять записей, если требуется иное количество, найдите строчку с sql-запросом и отредактируйте значение (см. LIMIT 10)

Комментарии:

  1. Денис

    Втрой код неправильный. Он не выводит последние посты.

Robertflynn.net: canadians are realizing this in record numbers.