Информер курса валют ЦБ РФ   •   Магазин расширений
616 просм
11 комм
Поделиться:

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

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

Под популярностью может подразумеваться как активность ваших посетителей (комментирование той или иной записи), так и простые просмотры. О том, как вывести такие записи, сегодня и пойдет речь.

Выводим популярные записи по количеству комментариев за неделю, месяц, год

Для вывода популярных записей мы будем использовать функцию «query_posts». В качестве простого примера выводить мы будем заголовок и ссылку на запись. Реализация:

<ul>

	<?php
		
		$time = "&monthnum=".date("m"); // За месяц
		$sort = "DESC"; // Порядок сортировки
		$numb = "5"; // Количество записей для вывода
		
		query_posts("post_type=post&posts_per_page=".$numb."&orderby=comment_count&order=".$sort."&year=".date("Y").$time);
      
		while (have_posts()): the_post();
		
	?>
      
		<li>
			<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
		</li>

	<?php
		
		endwhile;
		wp_reset_query();
	
	?>

</ul>

Код вставляете в нужное место вашей темы. Что нас здесь интересует?

$numb – количество выводимых записей.

$sort – порядок сортировки, в нашем случае – от большего к меньшему. Если нужно наоборот, замените значение на «ASC».

$time – за какой период вывести данные, в нашем случае – за последний месяц. Если вам нужно осуществить вывод за неделю, то эту строчку замените на:

$time = "&w=".date("W"); // За неделю

А если за год, то замените на:

$time = ""; // За год

Здесь также доступен период день:

$time = "&monthnum=".date("m")."&day=".date("j"); // За день

И час:

$time = "&monthnum=".date("m")."&day=".date("j")."&hour=".date("H"); // За час

Меньшие периоды, думаю, рассматривать нет смысла. По комментариям, собственно, и все.

Выводим популярные записи по количеству просмотров за неделю, месяц, год

Что касается просмотров, для начала вам необходимо установить хак из этой статьи. А вот дальше все делается по аналогии:

<ul>

	<?php
		
		$time = "&monthnum=".date("m"); // За месяц
		$numb = "5"; // Количество записей для вывода
		
		query_posts("post_type=post&posts_per_page=".$numb."&meta_key=post_views_count&orderby=meta_value_num&year=".date("Y").$time);
      
		while (have_posts()): the_post();
		
	?>
      
		<li>
			<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
		</li>

	<?php
		
		endwhile;
		wp_reset_query();
	
	?>

</ul>

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

11
комментариев
6.08 в 11:34
Добрый день!
Артем, можете пояснить работу настроек временных интервалов
$time = ""; // За год
$time = "&monthnum=".date("m"); // За месяц
$time = "&w=".date("W"); // За неделю
$time = "&day=".date("j"); // За день
$time = "&hour=".date("H"); // За час

У меня на сайте выдача настолько произвольная, что никак не соотносится с задаваемыми интервалами. Причем, если удалить символы в скобках, то результат больше похож на верный по диапазону дат. В общем, сортировка по времени работает некорректно.
  • 0
Михаил, Здравствуйте!

Спасибо за Ваш вопрос. Во времени "день" и "час" и в правду была ошибка - исправил. Остальные временные метки работают без проблем. Проверил на WP 5.2.2.
  • 0
6.08 в 16:45
Спасибо за ответ!
В этом варианте выводятся только тексты, опубликованные за этот период, а не все, которые посещались за этот период.
И также, алгоритм вывода за неделю $time = "&w=".date("W"); // За неделю
отличается от других почему-то.
  • 0
Михаил, Все верно. Берутся записи за указанный период и от них отбираются нужные по количеству просмотров/комментариев.

> И также, алгоритм вывода за неделю $time = "&w=".date("W"); // За неделю
отличается от других почему-то.

То есть?
  • 0
6.08 в 17:11
Мне кажется, корректней делать отбор среди всех записей, прочитанных за этот период времени, а не только среди опубликованных за этот период. А если новых записей не будет, то и вывод будет нулевым. Но при этом посетители же читают тексты. Пробовал удалить символы между скобками, то есть - date(). Вывод записей есть, правда, не знаю, насколько это корректно.

По поводу недели:
у вас сейчас так: $time = "&w=".date("W"); // За неделю
а вроде должно быть так: $time = "&monthnum=".date("m")."&w=".date("W"); // За неделю
  • 0
Михаил, по первому: дело не в корректности метода отбора материалов. И тот и тот вариант правильный, вопрос в том, какой метод отбора нужен Вам.

date() - обычное использование этой функции возвращает вам текущую дату в секундах.

По второму: date("W") выводит не номер недели месяца, а номер недели года и если Вы сейчас выведите это на экран, то получите значение 32 (если не ошибаюсь). Так что тут все верно.
  • 0
6.08 в 17:56
В общем, актуальный вопрос один на самом деле. Как вывести в рейтинге посты, опубликованные когда угодно, но просмотренные посетителями сайта за определенный период? Ведь какой смысл узнать популярность постов среди опубликованных за эту неделю, если, например, в то же время, посты, опубликованные месяц назад пользуются большей популярностью. Как реализовать такую схему?
  • 0
6.08 в 17:58
То есть, смысл в том, что важна актуальность любых постов для читателей на данный период - день или неделя.
  • 0
6.08 в 18:06
И еще, если позволите :) Например, опубликован вчера новый текст, а он никому не интересен. Но в выводе будет только он один за день. А в тот же день люди массово читали другой текст, опубликованный месяц назад. А в выводе его не будет. Смысла в таком рейтинге вообще нет.
  • 0
Михаил, вопрос интересный но немного сложный в реализации, т.к много каких подсчетов нужно делать. Подумаю на досуге об этом.
  • 0
6.08 в 20:23
Спасибо! В любом случае, ваш скрипт использую.
  • 1
Гостям запрещено учавствовать в обсуждениях сайта. Авторизуйтесь, чтобы иметь возможность оставить свое мнение о материале или задать вопрос.
Подняться наверх