Entendendo o Date Query no WordPress 3.7
Muitas novidades interessantes foram divulgadas no lançamento do WordPress 3.7, e a que mais animou a comunidade de desenvolvimento foram as Date Query’s.
Entendendo a Date Query
O Date Query surgiu como um patch sugerido por Alex Mills, um desenvolvedor conhecido como Viper007Bond que introduziu a capacidade de fazer consultas baseadas em data complexas para buscar posts e comentários a partir do banco de dados do WordPress.
No passado, você podia selecionar mensagens que tinham um valor específico para o ano, mês, etc, mas não havia nenhuma maneira de fazer as coisas como a seleção de todas as mensagens antes (ou depois) de uma determinada data ou selecionando todas as mensagens entre duas datas diferentes. Com o Date Query, isso é facilmente possível!
// Buscando os 10 posts mais recentes no período de 9 da manhã e 5 da tarde em dias da semana $some_posts = new WP_Query( array( 'date_query' => array( array( 'hour' => 9, 'compare' => '>=', ), array( 'hour' => 17, 'compare' => '<=', ), array( 'dayofweek' => array( 2, 6 ), 'compare' => 'BETWEEN', ), ), 'posts_per_page' => 10, ) ); // Pegando todos os posts feitos durante o verão americano // de Primeiro de Junho e 31 de Agosto (inclusive) // Note que a função strtotime() pode ser usada $some_posts = new WP_Query( array( 'date_query' => array( array( // String via strtotime() 'after' => 'June 1st, 2013', // Ou se você quiser um arreay 'before' => array( 'year' => 2013, 'month' => 8, 'day' => 31, ), 'inclusive' => true, ), ), 'posts_per_page' => -1, ) ); // Qualquer post feito a um ano atrás, mas modificados no mês passado $some_posts = new WP_Query( array( 'date_query' => array( array( 'column' => 'post_date_gmt', 'before' => '1 year ago', ), array( 'column' => 'post_modified_gmt', 'after' => '1 month ago', ) ), 'posts_per_page' => -1, ) );
Funciona para comentários também:
// Todos os comentários feitos no post de ID 123 que foram feitos na semana passada $some_comments = get_comments( array( 'post_ID' => 123, 'date_query' => array( array( 'after' => '1 week ago', ), ), ) );
As consultas de data avançadas devem permitir que os desenvolvedores fazerem algumas coisas interessantes como a exibição de cronogramas, arquivos personalizados, post por estação do ano e qualquer outra coisa que se possa imaginar, com intervalos de datas.
Parâmetros de Data do WordPress
- year (int) – Ano com 4 dígitos (ex.: 2011).
- monthnum (int) – Mês (de 1 a 12).
- w (int) – Semana do ano (de 0 a 53). Usa o comando MySQL WEEK. O modo depende da opção “start_of_week”.
- day (int) – Dia do mês (de 1 a 31).
- hour (int) – Hora (de 0 a 23).
- minute (int) – Minutos (de 0 a 60).
- second (int) – Segundos (de 0 a 60).
- m (int) – Ano e Mês (ex.: 201307).
Parâmetros de data aceitos no Date Query
- date_query (array) – Parâmetros de data
- year (int) – Ano com 4 dígitos (ex.: 2011).
- month (int) – Mês no formato numérico (de 1 to 12).
- w (int) – Semana do ano (de 0 a 53).
- day (int) – Dia do mês (de 1 a 31).
- hour (int) – Hora (de 0 a 23).
- minute (int) – Minutos (de 0 a 60).
- second (int) – Segundos (de 0 a 60).
- after (string/array) – Dados ‘Antes’. Para os parâmetros, veja a WP_Date_Query::build_mysql_datetime()’,
- before (string/array) – Dados ‘Depois’. Para os parâmetros, veja a WP_Date_Query::build_mysql_datetime()’,
- inclusive (boolean) – Para after/before, para passar se o valor exato deve ser incluído ou não.
- compare (string) – Veja a função WP_Date_Query::get_compare().
- column (string) – Column para buscar a query. Padrão: ‘post_date’.
- relation (string) – OR ou AND, como os sub-arrays devem ser comparados. Default: AND.
As consultas de data avançadas substituem métodos mais volumosos utilizados no passado, tais como a adição de um filtro para posts_where.
Muito bom. O que faz o WordPress ser tão esplêndido é sua capacidade de ser melhorado por todos. =)
Seu post me ajudou muito. As vezes coisas simples se tornam um pesadelo se a gente não tem o conhecimento adequado. Tava me batendo pra definir postagens dos últimos 7 dias, mas agora com esse date_query tudo fica mais fácil.