Como publicar postagens entre uma data e hoje?


10

É uma maneira de publicar postagens entre uma data e hoje query_posts()?

Exemplo: todas as postagens publicadas desde 01/04/2012

obrigado

EDIT:

Como adicionar a data do filtro a essas postagens de consulta?

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


Não use query_posts (). Verifique isto -> wordpress.stackexchange.com/a/1755/7890
moraleida

Respostas:


23

ATUALIZAÇÃO 23 de dezembro de 2014

Existe um método melhor usando a date_querypropriedade da WP_Queryclasse:

$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 );

RESPOSTA ANTIGA

Use os parâmetros de tempo em WP_Query ()

Exemplo de citação do Codex:

Retornar postagens dos últimos 30 dias:

// 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' );

Editar (em resposta à pergunta atualizada do OP).

Evite usar query_posts . Você pode usar a técnica acima para alterar sua consulta principal (sujeito a alguns condicionais extras - é a página inicial, é uma página chamada 'foobar' etc.):

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' );

Está bem ! Assim, o filtro está agora em $query_string. Mas como ele funciona com meus argumentos em Query_Posts? (Confira a minha edição @Moraleida)
Steffi

11
@ Steffi - veja a resposta atualizada. Espero que você não se importe com a adição, Moraleida.
Stephen Harris

11
acabou de adicionar sua consulta atual, para que você possa abandonar os query_posts imediatamente. :) E obrigado @StephenHarris pela atualização rápida!
Moraleida # 14/12

Obrigado @moraleida! Surpreendente ! Só uma coisa. Você disse: "Evite usar query_posts". Mas é melhor usar query_posts()em arquivos de modelos (como home.php ) do que new WP_Query(), não?
Steffi

Na verdade não. query_postsdeve ser usado apenas para alterar o loop principal - e muitas pessoas argumentam que ainda não existe (há the pre_get_postsfiltro para isso também). Costumo encontrar-me usando apenas WP_Queryou get_postspara todas as minhas consultas, pois são independentes e podem ser usadas várias vezes sem interferir em qualquer outra coisa. Verifique as respostas vinculadas em seus comentários para obter uma explicação completa. :)
moraleida

3

A partir da versão 3.7, você pode usar date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

Portanto, os argumentos passados ​​teriam a seguinte aparência:

$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

Se você deseja obter postagens entre duas datas, use os parâmetros before e after no parâmetro 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'
);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.