Как вывести популярные статьи без плагина в вордпресс?

Решено

Мне нужно вывести популярные статьи без плагина. Не хочу использовать плагин так как уже очень много их установлено и они начинают тормозить систему.

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

Следующий код выведет популярные статьи, сортируя их в зависимости от количества комментариев:

 <div class="widget popular">
 <h3 class="widget-title">Популярные статьи</h3>
 <ul>
 <?php
 $posts_qty = 5;
 $period = 90;
 $interval = date('Y-m-d', strtotime("-$period days"));
 $result = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_date > '$interval' ORDER BY comment_count DESC LIMIT 0 , $posts_qty");
 foreach ($result as $post) : setup_postdata($post);
 ?>
 <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> (<?php comments_number('0', '1', '%'); ?>)</li>
 <?php endforeach; ?>
 </ul>
 </div>
 

Теперь другой вариант, выведем по количеству просмотров. Для этого сперва нужно сохранять сколько раз пользователи посещали страницу. Следующий код нужно вставить в файл function.php:

 function setPostViews($postID) {
 $count_key = 'post_views_count';
 $count = get_post_meta($postID, $count_key, true);
 if($count==''){
 $count = 0;
 delete_post_meta($postID, $count_key);
 add_post_meta($postID, $count_key, '0');
 }else{
 $count++;
 update_post_meta($postID, $count_key, $count);
 }
 }
 function getPostViews($postID){
 $count_key = 'post_views_count';
 $count = get_post_meta($postID, $count_key, true);
 if($count==''){
 delete_post_meta($postID, $count_key);
 add_post_meta($postID, $count_key, '0');
 return "0";
 }
 return $count;
 }
 

А теперь нужно вставить вызов данной функции в файл single.php внутри цикла loop:

 setPostViews(get_the_ID());
 

Код выше создает произвольное поле к посту(post_views_count) и записывает количество обновлений страниц. Теперь можно сортирую по это полю вывести самые популярные записи. Для этого используем следующий код:

 <div class="widget popular">
 <h3 class="widget-title">Популярные статьи</h3>
 <ul>
 <?php
 $args = array( 'numberposts' => 5, 'meta_key' => 'post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC' );
 query_posts($args);
 while ( have_posts() ) : the_post();
 ?>
 <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
 <?php endwhile; wp_reset_query(); ?>
 </ul>
 </div>
 

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

Ваш ответ

Размещая свой ответ, вы соглашаетесь с правилами сайта.