Estoy tratando de escribir un WP_Query
donde llamo solo las publicaciones que se publicaron después de marzo de 2012. Puedo llamar con éxito las publicaciones que son solo en marzo de 2012, pero que tienen dificultades para hacer ‘desde marzo de 2012 en adelante’.
$current_year = date('2012');
$current_month = date('>3'); // This doesn't work
$current_month = date('3'); // This DOES work
$custom_query = new WP_Query("year=$current_year&monthnum=$current_month&order=ASC&posts_per_page=-1");
¿Me estoy perdiendo algo simple o esto tiene que complicarse más?
Desde la versión 3.7 de WordPress, existe el argumento WP_Query date_query
que funciona perfectamente para este tipo de consulta.
Como se puede ver en el Codexpuede especificar una consulta de fecha con el after
argumento. los after
puede ser una cadena compatible con strtotime() o una matriz de valores de ‘año’, ‘mes’, ‘día’.
Para su ejemplo, algo como lo siguiente debería funcionar:
$args = array(
'posts_per_page' => -1,
'date_query' => array(
'after' => array(
'year' => 2012,
'month' => 3,
'day' => 1,
),
),
);
$custom_query = new WP_Query( $args );
O con una cadena strtotime():
$args = array(
'posts_per_page' => -1,
'date_query' => array( 'after' => '2012-03-01' ),
);
$custom_query = new WP_Query( $args );
La sección “Parámetros de tiempo” en http://codex.wordpress.org/Class_Reference/WP_Query tiene una nota sobre rangos de fechas. Usando la misma técnica:
$query_string = "order=ASC&posts_per_page=-1";
// Create a new filtering function that will add our where clause to the query
function filter_where( $where="" ) {
$where .= " AND post_date >= '2012-03-01'";
return $where;
}
add_filter( 'posts_where', 'filter_where' );
$custom_query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );