Несколько критериев для сортировки популярных записей

12
K
На сайте с 10.01.2015
Offline
110
1415

Всем доброго времени суток! Прошу помощи! Как можно решить такую проблему: необходимо добавить сортировку записей по числу просмотров за определённый период, например 5 дней. В данный момент я имею такой код, который просто сортирует записи по числу просмотров за все время.

<ul>

<?php
$args = array( 'posts_per_page' => 6, 'meta_key' => 'post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC' );
query_posts($args);
while ( have_posts() ) : the_post();
?>
<div class="posts_s">
<a onclick="return !window.open(this.href)" href="<?php the_permalink() ?>">
<span class="posts_th"><?php the_post_thumbnail(array(105,70)); ?></span></a>
<span class="posts_text"><a href="<?php the_permalink() ?>"><?php the_title(); ?></span></div>
</a>
<?php endwhile; wp_reset_query(); ?>
</ul>
ДП
На сайте с 23.11.2009
Offline
203
#1

Если у вас нигде не хранится число просмотров за каждый день - то ваша задача невыполнима.

K
На сайте с 10.01.2015
Offline
110
#2

Предположим, что хранится? Как тогда должен выглядеть код?

ДП
На сайте с 23.11.2009
Offline
203
#3

Зависит от реализации. Самое простое, наверно, это раз в сутки аггрегировать число просмотров и записывать их в какое-то поле метаданных - типа post_views_count_5days, тогда у вас код будет такой же как сейчас, за исключением 'meta_key' => 'post_views_count_5days'

Но поскольку в WP, насколько я знаю, данные о просмотрах по дням не хранятся - вам надо будет как-то прикручивать систему, кототрая будет эти данные считать и записывать в этот meta_key - post_views_count_5days

K
На сайте с 10.01.2015
Offline
110
#4
Дикий пионер:
Зависит от реализации. Самое простое, наверно, это раз в сутки аггрегировать число просмотров и записывать их в какое-то поле метаданных - типа post_views_count_5days, тогда у вас код будет такой же как сейчас, за исключением 'meta_key' => 'post_views_count_5days'
Но поскольку в WP, насколько я знаю, данные о просмотрах по дням не хранятся - вам надо будет как-то прикручивать систему, кототрая будет эти данные считать и записывать в этот meta_key - post_views_count_5days

Это трудно реализовать? Сколько это может стоить?

ДП
На сайте с 23.11.2009
Offline
203
#5
Это трудно реализовать?

На первый взгляд не трудно, но лучше у спецов по WP узнавать.

Сколько это может стоить?

Без понятия.

archibalds
На сайте с 10.03.2012
Offline
51
#6
Верстка макетов, интеграция с wordpress и modx, написание скриптов, опыт более 6 лет (/ru/forum/999087)
дани мапов
На сайте с 06.09.2012
Offline
204
#7

Там выбираются посты по дате публикации, совсем не то.

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
djdiplomat
На сайте с 05.08.2009
Offline
136
#8
дани мапов:
Там выбираются посты по дате публикации, совсем не то.

Недавно решал похожую, слегка даже усложненную задачу.

В вашем случае все просто.

Формируйте запрос и сразу сортируйте по доп-полям (я так понимаю, что в доп-поле вы храните число просмотров? Т.е что то типа того будет.

$events_args = array(

'numberposts' => -1,

'offset' => 0,

'category' => get_cat_ID('События'),

'meta_key' => 'mer_nastr_data',
'orderby' => 'meta_value',
'order' => 'DESC',

'post_type' => 'post',

'post_status' => 'publish'

);

а потом просто посты загребаем.

$events = get_posts($events_args);

PS mer_nastr_data - это имя доп поля.

K
На сайте с 10.01.2015
Offline
110
#9

В том то вся и проблема, что у меня посты реализованы через стандартные средства WP. Прописаны GetPost и SetPost. Сортировка идет через post_view_count. Как мне научить сайт сохранять данные о просмотрах за нужное мне время отдельно?

archibalds
На сайте с 10.03.2012
Offline
51
#10

<?php

// Создадим новую функцию которая добавит условие where в запрос

function filter_where( $where = '' ) {

// за последние 5 дней

$where .= " AND post_date > '" . date('Y-m-d', strtotime('-5 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' );

?>

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий