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

14 мая 2012 г., 15:59:24
Просмотры: 76.8K
Голосов: 16

Есть ли способ получить записи, опубликованные между определенной датой и сегодняшним днем с помощью query_posts()?

Пример: Все записи, опубликованные с 2012-04-01

Спасибо

РЕДАКТИРОВАНИЕ:

Как добавить фильтр по дате в этот Query Posts?

query_posts( array(  
    array('post'),
    'tax_query' => array(
        array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array('post-format-image')
        )
    ),
    'cat' => '-173',
    'post_status' => 'publish'
) );
2
Комментарии

Не используйте query posts! :)

Stephen Harris Stephen Harris
14 мая 2012 г. 16:21:10

Не используйте query_posts(). Посмотрите это -> http://wordpress.stackexchange.com/a/1755/7890

moraleida moraleida
14 мая 2012 г. 16:22:18
Все ответы на вопрос 3
5
36

ОБНОВЛЕНИЕ от 23 декабря 2014

Существует более удобный способ с использованием свойства date_query класса WP_Query:

$args = array(
    'post_type' => 'post', 
    'tax_query' => array(
        array( 
            'taxonomy'  => 'post_format',
            'field'     => 'slug',
            'terms'     => array( 'post-format-image' )
        )
    ),
    'cat'           => '-173',
    'post_status'   => 'publish',
    'date_query'    => array(
        'column'  => 'post_date',
        'after'   => '- 30 days'
    )
);
$query = new WP_Query( $args );

СТАРЫЙ ОТВЕТ

Используйте Параметры времени в WP_Query()

Цитируем пример из Codex:

Получить записи за последние 30 дней:

// Это ваш текущий запрос, к которому будет добавлена фильтрация.
$query_string = array(
    'post_type' => 'post', 
    'tax_query' => array(
        array(
            'taxonomy'  => 'post_format',
            'field'     => 'slug',
            'terms'     => array( 'post-format-image' )
        )
    ),
    'cat'           => '-173',
    'post_status'   => 'publish'
);

// Создаем новую функцию фильтрации, которая добавит условие 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 = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );

Редактирование (в ответ на обновленный вопрос автора).

Избегайте использования query_posts. Вы можете использовать описанную выше технику для изменения основного запроса (с учетом некоторых дополнительных условий - является ли это главной страницей, является ли страницей с названием 'foobar' и т.д.):

function wpse52070_filter_where( $where = '' , $query ) {
   if( $query->is_main_query() && is_page( 'foobar' ) ){
      // записи за последние 30 дней
      $where .= " AND post_date > '" . date( 'Y-m-d', strtotime( '-30 days' ) ) . "'";
   }

    return $where;
}
add_filter( 'posts_where', 'wpse52070_filter_where' );
14 мая 2012 г. 16:08:15
Комментарии

Хорошо! Теперь фильтр находится в $query_string. Но как это работает с моими аргументами в Query_Posts? (Проверь моё редактирование @Moraleida)

Steffi Steffi
14 мая 2012 г. 16:16:02

@Steffi - смотри обновлённый ответ. Надеюсь, ты не против добавления, Moraleida.

Stephen Harris Stephen Harris
14 мая 2012 г. 16:30:18

просто добавил твой текущий запрос, так что ты можешь сразу отказаться от query_posts. :) И спасибо @StephenHarris за быстрое обновление!

moraleida moraleida
14 мая 2012 г. 16:32:14

Спасибо @moraleida ! Потрясающе! Только один момент. Вы сказали: "Избегайте использования query_posts." Но разве не лучше использовать query_posts() в файлах шаблонов (таких как home.php), чем new WP_Query()?

Steffi Steffi
14 мая 2012 г. 16:43:28

Не совсем. query_posts следует использовать только для изменения основного цикла - и многие утверждают, что даже в этом случае это не лучший вариант (для этого есть фильтр pre_get_posts). Я часто использую только WP_Query или get_posts для всех своих запросов, так как они автономны и могут использоваться многократно, не мешая работе других элементов. Ознакомьтесь с ответами по ссылкам в комментариях для подробного объяснения. :)

moraleida moraleida
14 мая 2012 г. 17:00:51
0

Если вам нужно получить записи между двумя датами, используйте параметры before и after в параметре date_query:

$query_string = array(
  'post_type' => 'post', 
  'date_query' => array(
    'column' => 'post_date',
    'after' => '2012-04-01',
    'before' => '2012-04-30' 
  ),
  'tax_query' => array(
      array( 
         'taxonomy' => 'post_format',
         'field' => 'slug',
         'terms' => array('post-format-image')
      )
  ),
  'cat' => '-173',
  'post_status' => 'publish'
);
27 мая 2019 г. 06:31:35
0

Начиная с версии 3.7 вы можете использовать date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

Таким образом, передаваемые аргументы будут выглядеть так:

$query_string = array(
      'post_type' => 'post', 
      'date_query' => array(
        'after' => '2012-04-01' 
      ),
      'tax_query' => array(
          array( 
             'taxonomy' => 'post_format',
             'field' => 'slug',
             'terms' => array('post-format-image')
          )
      ),
      'cat' => '-173',
      'post_status' => 'publish'
);
1 авг. 2014 г. 00:41:16