Як опублікувати публікації між датою та сьогодні?


10

Чи це спосіб отримувати публікації між датою і сьогодні query_posts()?

Приклад: Усі публікації, опубліковані з 2012-04-01

Дякую

Редагувати:

Як додати дату фільтра до цих запитів запитів?

query_posts( array(  
    array('post'),
    'tax_query' => array(
        array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array('post-format-image')
        )
    ),
    'cat' => '-173',
    'post_status' => 'publish'
) );


Не використовуйте query_posts (). Перевірте це -> wordpress.stackexchange.com/a/1755/7890
moraleida

Відповіді:


23

ОНОВЛЕННЯ 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 ()

Цитуючи приклад із Кодексу:

Повернення повідомлень за останні 30 днів:

// This takes your current query, that will have the filtering part added to.
$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'
);

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
    // posts in the last 30 days
    $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' );

Редагувати (у відповідь на оновлене запитання ОП).

Уникайте використання запитів_posts . Ви можете скористатися описаною вище технікою для зміни вашого основного запиту (за умови додаткових умов - це домашня сторінка, це сторінка під назвою "foobar" тощо):

function wpse52070_filter_where( $where = '' , $query ) {
   if( $query->is_main_query() && is_page( 'foobar' ) ){
      // posts in the last 30 days
      $where .= " AND post_date > '" . date( 'Y-m-d', strtotime( '-30 days' ) ) . "'";
   }

    return $where;
}
add_filter( 'posts_where', 'wpse52070_filter_where' );

Добре ! Тож фільтр зараз у $query_string. Але як це працює з моїми аргументами в Query_Posts? (Перевірити мою редакцію @Moraleida)
Стеффі

1
@Steffi - див. Оновлену відповідь. Сподіваюся, ви не заперечуєте над тим, Моралейда.
Стівен Харріс

1
щойно додав ваш поточний запит, тож ви зможете одразу вирвати query_posts. :) І дякую @StephenHarris за швидке оновлення!
moraleida

Дякую @moraleida! Дивовижний ! Тільки одне. Ви сказали: "Уникайте використання query_posts." Але краще використовувати query_posts()файли шаблонів (наприклад, home.php ), ніж new WP_Query()ні?
Стеффі

Не зовсім. query_postsйого слід використовувати лише для зміни основного циклу - і багато людей стверджують, що навіть тоді ( the pre_get_postsдля цього теж є фільтр). Я часто виявляю, що використовую лише WP_Queryабо get_postsдля всіх моїх запитів, оскільки вони є окремими, і їх можна використовувати декілька разів без втручання в будь-що інше. Перевірте пов'язані відповіді на ваші коментарі для повного пояснення. :)
moraleida

3

Станом на 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'
);

0

Якщо ви хочете отримувати повідомлення між двома датами, використовуйте параметри до і після в параметрі 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'
);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.