¿Cómo obtener posts publicados entre una fecha y hoy?

14 may 2012, 15:59:24
Vistas: 76.8K
Votos: 16

¿Hay alguna forma de obtener posts publicados entre una fecha y hoy usando query_posts()?

Ejemplo: Todos los posts publicados desde el 2012-04-01

Gracias

EDICIÓN:

¿Cómo agregar el filtro de fecha en esta 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
Comentarios

¡No uses query posts! :)

Stephen Harris Stephen Harris
14 may 2012 16:21:10

No uses query_posts(). Revisa esto -> http://wordpress.stackexchange.com/a/1755/7890

moraleida moraleida
14 may 2012 16:22:18
Todas las respuestas a la pregunta 3
5
36

ACTUALIZACIÓN 23 de diciembre de 2014

Existe un método mejor utilizando la propiedad date_query de la clase 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 );

RESPUESTA ANTERIOR

Utiliza los Parámetros de Tiempo en WP_Query()

Citando un ejemplo del Codex:

Devolver publicaciones de los últimos 30 días:

// Esto toma tu consulta actual, a la que se le añadirá la parte de filtrado.
$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'
);

// Crear una nueva función de filtrado que añadirá nuestra cláusula WHERE a la consulta
function filter_where( $where = '' ) {
    // publicaciones en los últimos 30 días
    $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' );

Edición (en respuesta a la pregunta actualizada del OP).

Evita usar query_posts. Puedes usar la técnica anterior para modificar tu consulta principal (sujeto a algunos condicionales adicionales - es página de inicio, es una página llamada 'foobar', etc.):

function wpse52070_filter_where( $where = '' , $query ) {
   if( $query->is_main_query() && is_page( 'foobar' ) ){
      // publicaciones en los últimos 30 días
      $where .= " AND post_date > '" . date( 'Y-m-d', strtotime( '-30 days' ) ) . "'";
   }

    return $where;
}
add_filter( 'posts_where', 'wpse52070_filter_where' );
14 may 2012 16:08:15
Comentarios

¡Ok! Entonces el filtro ahora está en $query_string. ¿Pero cómo funciona con mis argumentos en Query_Posts? (Revisa mi edición @Moraleida)

Steffi Steffi
14 may 2012 16:16:02

@Steffi - mira la respuesta actualizada. Espero que no te moleste la adición, Moraleida.

Stephen Harris Stephen Harris
14 may 2012 16:30:18

acabo de agregar tu consulta actual, así puedes dejar de usar query_posts de inmediato. :) ¡Y gracias @StephenHarris por la rápida actualización!

moraleida moraleida
14 may 2012 16:32:14

¡Gracias @moraleida! ¡Increíble! Solo una cosa. Dijiste: "Evita usar query_posts". Pero ¿no es mejor usar query_posts() en archivos de plantilla (como home.php) que new WP_Query(), no?

Steffi Steffi
14 may 2012 16:43:28

En realidad no. query_posts solo debería usarse para alterar el loop principal - y mucha gente argumenta que ni siquiera entonces (también existe el filtro pre_get_posts para eso). A menudo me encuentro usando solo WP_Query o get_posts para todas mis consultas, ya que son independientes y se pueden usar múltiples veces sin interferir con nada más. Revisa las respuestas enlazadas en tus comentarios para una explicación detallada. :)

moraleida moraleida
14 may 2012 17:00:51
0

Si deseas obtener publicaciones entre dos fechas, entonces utiliza los parámetros before y after dentro del 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'
);
27 may 2019 06:31:35
0

A partir de la versión 3.7 puedes usar date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

Los argumentos pasados se verían así:

$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 ago 2014 00:41:16