¿Cómo obtener posts publicados entre una fecha y hoy?
¿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'
) );

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

¡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 - mira la respuesta actualizada. Espero que no te moleste la adición, Moraleida.

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

¡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?

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. :)

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

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