Отображение записей за последние 7 дней

13 мая 2013 г., 15:48:27
Просмотры: 27.7K
Голосов: 9

Я пытаюсь отобразить 5 самых рейтинговых записей за последнюю неделю (7 дней) на моем сайте, однако не могу понять, как их правильно вывести.

Вот что у меня получилось на данный момент, но это не работает:

<?php $slider_query = new WP_Query('posts_per_page=5&cat=3&orderby=highest_rated&order=desc'); ?>

<?php

$mylimit = 7 * 86400; // дни * количество секунд в дне

while ($slider_query->have_posts()) : $slider_query->the_post();

    $post_age = date('U') - get_post_time('U');

    if ($post_age < $mylimit) { 
?>

//Запись

<?php } ?>

<?php endwhile;?>
2
Комментарии

Обратите внимание, что orderby=highest_rated не является встроенной функцией WordPress. Вы используете какой-то плагин для рейтингов?

RRikesh RRikesh
13 мая 2013 г. 16:07:24

Да, я использую плагин для этого :) Спасибо за внимание!

Swen Swen
13 мая 2013 г. 16:25:06
Все ответы на вопрос 6
2
27

В дополнение к решению birgire, начиная с WordPress 3.7, вы можете использовать Параметры даты.

Ваши аргументы будут выглядеть следующим образом для фильтрации записей за последние 7 дней:

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'DESC',

    // Используем date_query для фильтрации записей за последнюю неделю
    'date_query' => array(
        array(
            'after' => '1 week ago'
        )
    )
); 
27 нояб. 2014 г. 17:34:37
Комментарии

Такой подход следует использовать, начиная с версии 3.7 :-)

Pieter Goosen Pieter Goosen
27 нояб. 2014 г. 17:41:16

Это хороший вариант, но он получает записи, опубликованные ровно 24*7 часов назад. Например, если сейчас ночь, он не найдет записи, опубликованные 7 дней назад утром.

karlosuccess karlosuccess
3 мар. 2023 г. 07:23:20
2

Думаю, это уже много раз обсуждалось здесь в WordPress Answers.

Вы также можете посмотреть примеры в разделе Time parameters в Codex для WP_Query.

Вот два из них (слегка адаптированные под ваши нужды)

Пример 1:

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

add_filter( 'posts_where', 'filter_where' );
$slider_query = new WP_Query('posts_per_page=5&cat=3&orderby=highest_rated&order=desc');    
remove_filter( 'posts_where', 'filter_where' );

Пример 2:

// Создаем функцию фильтрации, которая добавит условие WHERE в запрос
function filter_where( $where = '' ) {
    // записи с 1 мая по 8 мая 2013 года
    $where .= " AND post_date >= '2013-05-01' AND post_date < '2013-05-8'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$slider_query = new WP_Query('posts_per_page=5&cat=3&orderby=highest_rated&order=desc');
remove_filter( 'posts_where', 'filter_where' )

при условии, что у вас реализована сортировка orderby=highest_rated через какой-либо плагин, как вы упомянули в комментарии выше.

13 мая 2013 г. 16:47:54
Комментарии

Интересно, будет ли лучше использовать 'date_query'? Добавив следующее в аргументы wp_query: 'date_query' => array( array('after' => '1 week ago')

Christine Cooper Christine Cooper
26 нояб. 2014 г. 18:12:49

Да, теперь это предпочтительный метод, так как ответ был написан до появления параметра date_query ;-) @ChristineCooper

birgire birgire
27 нояб. 2014 г. 18:13:00
1

Из раздела Параметры времени в WP_Query:

Возвращает записи только за текущую неделю:

$week = date('W');
$year = date('Y');
$query = new WP_Query( 'year=' . $year . '&w=' . $week );
13 мая 2013 г. 16:03:38
Комментарии

Привет. Я еще не тестировал это, но почти уверен, что это не совсем то, что мне нужно. Вероятно, этот код выводит записи, опубликованные, например, на 13-й неделе. Мне же нужны записи, опубликованные за последние 7 дней. То есть, например, со среды 8 мая до среды 1 мая.

Swen Swen
13 мая 2013 г. 16:27:50
0

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

                $date_range = strtotime ( '-7 day' );  
                $args = array(
                    'post_type'         => 'post',
                    'post_status'       => 'publish',
                    'posts_per_page'    => '10',
                    'meta_key'          => 'post_views_count',
                    'orderby'           => 'meta_value_num',
                    'order'             => 'DESC', 
                    'date_query'        => array(
                        array(
                            'after' => array(
                                'year'  => date('Y', $date_range ),
                                'month' => date('m', $date_range ),
                                'day'   => date('d', $date_range ),
                            ),
                        )
                    )
                );


                $query = new WP_Query( $args );
28 февр. 2018 г. 15:21:41
0

вы можете просто использовать wp_get_archives()

 wp_get_archives( array( 'type' => 'weekly', 'limit' => 1, 'show_post_count' => 'true' ,'format'=>'option') ); ?>
20 дек. 2020 г. 11:14:28
0

Более простое использование SQL-запроса с хуком WordPress posts where

function getStartAndEndDate($week, $year) {
$dto = new DateTime();
  $dto->setISODate($year, $week);
  $ret['week_start'] = $dto->format('Y-m-d');
  $dto->modify('+6 days');
  $ret['week_end'] = $dto->format('Y-m-d');
  return $ret;
}

add_filter( 'posts_where', 'wpse29897_no_parents', 10, 2 );
function wpse29897_no_parents( $where, $query )
{
    if( isset( $query->query_vars['post_type'] ) && 'menu_plans' == $query->query_vars['post_type'] )
    {
        if( '' != $where )
    {
        
        $currentdate = date('Y-m-d');
        $currdate = new DateTime($currentdate);
        if($_GET['weekchk']){
            $currentweek = $_GET['weekchk'];
        }else{
            $currentweek = $currdate->format("W");
        }
        $week_array = getStartAndEndDate($currentweek,date('Y'));
        $ws = "'".$week_array['week_start']."'";
        $we = "'".$week_array['week_end']."'";
        $where .= " AND post_date >= ".$ws." AND post_date < ".$we."";
    }
    else
    {
        $where .= " AND post_date >= '2020-07-28' AND post_date < '2020-08-4'";
    }
}
return $where;
}
5 авг. 2021 г. 16:08:53