QUERY POST все может. Лучшие записи за последний месяц.

Приветствую всех, очень часто у пользователей wordpress возникает потребность в выводе популярных записей, но к сожалению по сей день разработчики не внедрили данную функцию. В этом уроке я покажу вам как внедрить в ваш WordPress учет количества просмотров записей без плагинов, и в будущем вы сможете выводить популярные записи за любой период, или же комбинировать популярные по количеству просмотров и комментариев. И так давайте приступим к усовершенствованию нашего wordpress.

Wordpress вывод лучших записей query posts

1. Добавляем дополнительные поля к старым записям.

Первое что нам понадобится это добавить дополнительное поле ко всем записям, в котором мы установим значение просмотров страницы на ноль. Для этого нужно выполнить SQL запрос.

insert into wp_postmeta (post_id, meta_key, meta_value)
select ID, 'post_views_count', '0' from wp_posts;

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

ВНИМАНИЕ, если у вас новый блог и постов еще нету, вам не нужно проделывать процедуру выше.

2. WordPress хак для контроля количества просмотров.

И так после того как мы проделали предыдущий пункт, нам понадобиться внедрить функцию которая будет контролировать количество просмотров. Для этого вставим код в 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 View";
 }
 return $count.' Views';
}
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);
 }
}

add_action('publish_post', 'setPostViews');

Код вставляем в любом месте между тегами <?php и ?>

3. Вызываем обработчик.

Добавим вызов функции на странице, для этого открываем single.php или другой файл который отвечает за отображение полной записи. Вставляем код внутри цикла, после строки <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
ВНИМАНИЕ, в вашем коде, данная строка может незначительно отличаться, но код всегда начинается из if ( have_posts() )

Код для вставки внутри цикла

<?php setPostViews(get_the_ID()); ?>

После этого, при каждом просмотре страницы, в дополнительном поле значение будет увеличиваться. Чтобы включить отображение дополнительных полей в админке перейдите Все записи – Выберите любую запись – Вверху страницы (Настройка экрана) – Ставим галочку “Произвольные поля”. После чего вы сможете увидеть количество просмотров страницы.

Проверим работоспособность, для этого просмотрите любую страницу вашего сайта, после чего откройте ее через админ панель. Если вы увидите примерно такую картину в дополнительных полях, значит все работает.

Вордпрес количество просмотров поста
4. Выводим количество просмотров на странице.

Для этого в файле single.php вставляем код в то место где вы хотите выводить количество просмотров, к примеру после <?php the_content(); ?>

<?php echo getPostViews(get_the_ID()); ?>

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

Ну вот мы плавно подошли к самому интересному, вывод топ новостей за последний месяц. Допустим вы уже определились где вы хотите выводить лучшие новости, я буду использовать для примера файл index.php

Для начала вы должны сформировать тот вид записи который вы хотите видеть в будущем. После чего перед циклом <?php if ( have_posts() ) : вставляем код.

<?php
// Создадим новую функцию которая добавит условие where в запрос
function filter_where( $where = '' ) {
 // за последние 30 дней
 $where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
 return $where;
}

add_filter( 'posts_where', 'filter_where' );
query_posts( $query_string . 'meta_key=post_views_count&orderby=meta_value_num&order=DESC' );
remove_filter( 'posts_where', 'filter_where' );
?>

И в конце цикла после endif и endwhile, вставляем код для корректного отображения остального материала.

<?php wp_reset_query(); ?>

Вот и всё, вывод популярных записей без плагинов готов! Если вы сделали все по моей инструкции то все должно работать. Если у вас возникнут вопросы, или у вы не сможете установить код, задавайте вопросы в комментарии. Всем удачи!

Хотите подобный функционал, верстку либо помощь в настройке вашего сайта?
Свяжитесь со мной

10 Комментария к “QUERY POST все может. Лучшие записи за последний месяц.”

  • baks ·
    09.05.2014 в 18:53
    #

    все работает до внедрения функции фильтра – “Создадим новую функцию которая добавит условие where в запрос”
    Она не срабатывает – страница ломается, добавлял((

    • Admin ·
      09.05.2014 в 23:41
      #

      Вы его вставляете перед if have_post?
      Что отображается на экране, когда перестает работать?

  • baks ·
    10.05.2014 в 03:37
    #

    да перед if have_post, и не работало. На экране просто не выводится содержание поста..коменты, сайдбар присутсвтвует, т.е. the_content схлопывается по видимому…
    Но в принципе я нашел похожий код, где не требуется внедрение функции в functions.php, там все одним куском кода. И все работает, но как оказалось, не то что надо.. Вот код:
    global $post;
    function filter_where($where = ”) {
    $where .= ” AND post_date > ‘” . date(‘Y-m-d’, strtotime(‘-30 days’)) . “‘”;
    return $where;}
    add_filter(‘posts_where’, ‘filter_where’);
    query_posts(‘meta_key=post_views_count&orderby=meta_value_num&order=DESC’);
    while (have_posts()): the_post(); ?>

    и тп.

    Но оказалось, что это не то что нужно)) А нужно, чтобы счечик сбрасывался раз в 30 дней и показывало самые популярные статьи за последние 30 дней..
    Не подскажете решение для такого вывода ?

    • Admin ·
      10.05.2014 в 13:47
      #

      ВНИМАНИЕ, если у вас новый блог и постов еще нету, вам не нужно проделывать процедуру выше.

      В начале статьи. С моим кодом может не выводить из за того что один из параметров не соблюден например meta_key=post_views_count. Т.е. у записей нету этого параметра и значения, и они не выводятся, поэтому пусто. Вы установили счетчик просмотров на ноль? Как я описывал в первом пункте. Если да, откройте любую запись через админку, и посмотрите есть ли там доп. поле post_views_count со значением 0

  • baks ·
    10.05.2014 в 20:00
    #

    ну это понятно..а нет возможности выводить топ ВСЕХ записей за 30 дней (тоесть каждые 30 дней счетчик перезапускается )? В данном варианте, как я понял, проводится выборка записей из тех, что не старше 30 дней..

    • Admin ·
      10.05.2014 в 21:02
      #

      В данном случае выводит топ записей которые входят в промежуток последних 30 дней.
      Проблема в том что когда вы указываете в query posts период за который выводить, то он отфильтрует все лишние записи, т.е. выводит только те которые входят в промежуток этого времени.
      Вы можете выводить по количеству комментариев за все время. Например выводить с помощью &orderby=comment_count и указать количество нужных записей &posts_per_page=5.
      Или же пойти более сложным путем, если вы все таки хотите вывод самых популярных из ВСЕХ за последние 30 дней. Вам нужно просто каждый месяц скидывать счетчик просмотров, тогда будут только актуальные данные за месяц. Сбрасывать можно создав скрипт, используя cron

  • baks ·
    10.05.2014 в 21:33
    #

    спасибо за ответы, наверное проще тогда плагин поставить,тот же wordpress popular posts, где есть опция “Time Range:”…скидывать счетчик руками всеж гиморно))

    • Admin ·
      10.05.2014 в 23:32
      #

      Нет нет, я же писал, что можно скриптом написать который будет запрос в базу делать, и поставить его на cron, и указать запуск в конце месяца.

  • baks ·
    11.05.2014 в 01:07
    #

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

    • Admin ·
      11.05.2014 в 01:28
      #

      Ну если смотреть с точки зрения простоты, то лучше плагин :) Меньше заморочек. А если вы хотите более индивидуальные возможности, то тогда скрипты. Средствами wordpress много чего можно сделать, нужно только понять как он работает.

  • Оставить отзыв

    (обязательно)

    (обязательно)


    Наши друзья
    - ARTtime - Блог о Photoshop и Дизайн
    - Блог о дизайне и арте
    Реклама