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

Здравствуйте читатели блога gavnokod.com.

Сегодня я расскажу вам, как вывести в wordpress популярные записи вашего блога по количеству просмотров.

Стандартный функционал wordpress и плагинов дает возможность вывести популярные посты лишь по количеству комментариев к записи.

Но я посчитал, что на моем сайте количество просмотров более значимая цифра.

Кому интересно — в прошлой статье я рассматривал как сделать вывод в php фукнции date() на русском.

Справка: отдельные записи в блоге вордпресс выводятся с помощью single.php(если он есть в теме, иначе index.php).

По этому наш основной файл для изменения это single.php, а так-же functions.php, где будут размещены необходимые нам функции.

Они размещаются в папке с вашей используемой темой. Если вы в дальнейшем поменяете тему, все действия придется производить заново.

Для реализации этой возможности я вносил правки в 4 файла:

  • functions.php
  • single.php
  • content.php
  • meta-most-views.php (нужно создать)

Этапы, которые нам необходимо выполнить:

1. Вставить функции для работы с количеством просмотров записи(чтение, увеличение) в файл functions.php

Вот листинг кода, который я добавил в файл functions.php.

// Функции для работы с количеством просмотров записи, и вывода самых популярный записей.

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 просмотров";
  }
  echo _e('просмотров ', 'dot-b');
  return $count;
}

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 getMostViews($limit)
{
  //if ( !isset($limit) ) $limit = 5;
  global $wpdb;
  $result = $wpdb->get_results("SELECT meta_value, post_title, ID FROM $wpdb->postmeta LEFT JOIN $wpdb->posts ON ($wpdb->postmeta.post_id = $wpdb->posts.ID) WHERE $wpdb->postmeta.meta_key = 'post_views_count' ORDER BY meta_value DESC LIMIT 5");
  return $result;
}
// ******************

Берем его, и просто добавляем в свой файл functions.php.

  • функция getPostViews($postId) возвращает нам количество просмотров указанной записи
  • соответственно setPostViews($postId) увеличивает количество просмотров указанной записи на 1

Эти функции вызываются в файле single.php, то есть когда пользователь просматривает определенную запись.

Теперь, что-бы получить количество просмотров записи мы пишем <?php echo getPostViews(get_the_ID()); ?> в любом месте нашей страницы.

И конечно нужно не забыть увеличить количество просмотров вызвав <?php setPostViews( get_the_ID() ) ?>

2. Выводим список с самыми популярными записями на блоге wordpress.

Дальше я создал файл meta-most-views.php и вставил туда такой код:


<footer class="entry-meta most-views">
  <h5>Самое популярное</h5>
  <ul>
  <?php
    $posts = getMostViews(5);
    foreach ($posts as $p)
    {
      setup_postdata($p);
      echo "<li><a target='_blank' title=" . $p->meta_value . " href=" . get_permalink($p->ID) . ">" . $p->post_title . "</a></li>";
    }
  ?>
  </ul>
</footer>

Обрамление тегами в коде, вы можете поменять на необходимое вам.

Вот как это выглядит:

как выглядят популярные записи wordpress

3. Изменяем файл content.php

В content.php после строчки <?php the_content(); ?> я добавил код:

<?php if ( is_single() )
{
  get_template_part( 'meta', 'most-views' );
  if ( !current_user_can('administrator') ){
    setPostViews(get_the_ID());
  }
}
?>

Он и выводит в wordpress самые популярные записи по количеству просмотров.

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

4. Создаем файл meta-post.php

Далее в файле meta-post.php, где у меня выводятся теги и категория записи я вставил такой код:

<span class="post-views-count" title="Количество просмотров статьи">
  <?php echo getPostViews(get_the_ID()); ?>
</span>

Он служит для вывода количества просмотров записи пользователями.

Если вас что-либо не работает, или возникли вопросы — задавайте их в комментариях. Я постараюсь на них ответить.

Рекомендую для прочтения:

  • Дина

    Здравствуйте, Максим! Большое спасибо за код! Все работает, но есть одно НО: функция почему-то считает и мои просмотры записей, получается, что я сама накручиваю счетчик. Т.е. ваш код для content.php, где должна идти проверка не является ли пользователь администратором, не работает. Как это можно исправить? Заранее спасибо.

    • Здравствуйте, Дина!
      Попробуйте такой код:

      <?php if ( is_single() )
      {
        get_template_part( 'meta', 'most-views' );
        if ( !is_user_logged_in() ){
          setPostViews(get_the_ID());
        }
      }
      ?>
      
  • Serg

    а как выводить не рейтинг за все время а за 30 дней к примеру (т.е. счетчик сбрасывается каждые 30 дней )

  • Здравствуйте, а как сделать чтоб подсчёт шел только уникальных просмотров?
    То есть при обновлении странички счетчик не добавлял значение .