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

Опубликовано: 01.09.2018

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

WordPress Custom Query - Part 02 - Sorting

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


Angular read query string parameters

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

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


Angular query params

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(); ?>

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

Похожие записи

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

Свяжитесь со мной
rss