Профессиональная поддержка сайтов: разработка, дизайн, тексты, SEO и прочее от 500 Р   •   Реклама
745 просм
13 комм
Поделиться:

Выводим популярные записи за разный период времени по количеству просмотров и комментариев в 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>

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

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

Aleks Kac, если убрать временные рамки, то все старые материалы (по понятным причинам) будут иметь большее количество просмотров.

  • 0
19.09 в 20:17

Артем, почему вопрос сложный в реализации? Когда можно просто кусок кода убрать и будут все записи, а не только опубликованные за определенный период. Или я что-то не так понял?

<ul>

	<?php
		
		$numb = "5"; // Количество записей для вывода
		
		query_posts("post_type=post&posts_per_page=".$numb."&meta_key=post_views_count&orderby=meta_value_num");
      
		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>
  • 0
6.08 в 20:23

Спасибо! В любом случае, ваш скрипт использую.

  • 1

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

  • 0
6.08 в 18:06

И еще, если позволите :) Например, опубликован вчера новый текст, а он никому не интересен. Но в выводе будет только он один за день. А в тот же день люди массово читали другой текст, опубликованный месяц назад. А в выводе его не будет. Смысла в таком рейтинге вообще нет.

  • 1
6.08 в 17:58

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

  • 0
6.08 в 17:56

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

  • 0

Михаил, по первому: дело не в корректности метода отбора материалов. И тот и тот вариант правильный, вопрос в том, какой метод отбора нужен Вам.

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

По второму: date("W") выводит не номер недели месяца, а номер недели года и если Вы сейчас выведите это на экран, то получите значение 32 (если не ошибаюсь). Так что тут все верно.

  • 0
6.08 в 17:11

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

По поводу недели:

у вас сейчас так: $time = "&w=".date("W"); // За неделю

а вроде должно быть так: $time = "&monthnum=".date("m")."&w=".date("W"); // За неделю

  • 0

Михаил, Все верно. Берутся записи за указанный период и от них отбираются нужные по количеству просмотров/комментариев.

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

отличается от других почему-то.

То есть?

  • 0
6.08 в 16:45

Спасибо за ответ!

В этом варианте выводятся только тексты, опубликованные за этот период, а не все, которые посещались за этот период.

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

отличается от других почему-то.

  • 0

Михаил, Здравствуйте!

Спасибо за Ваш вопрос. Во времени "день" и "час" и в правду была ошибка - исправил. Остальные временные метки работают без проблем. Проверил на WP 5.2.2.

  • 0
6.08 в 11:34

Добрый день!

Артем, можете пояснить работу настроек временных интервалов

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

$time = "&monthnum=".date("m"); // За месяц

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

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

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

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

  • 0
Подняться наверх
«Pandoge» - помощник веб-мастера