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.

wordpress advanced date queries

Entendendo a Date Query

O Date Query surgiu como um patch sugerido por Alex, 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. Confira a discussão canônica em Trac para explorar a evolução desse recurso e colocá-lo para uma boa utilização no WordPress 3.7.

2 Comments

  1. César Henrique
    César Henrique

    Muito bom. O que faz o WordPress ser tão esplêndido é sua capacidade de ser melhorado por todos. =)

  2. 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.

Deixe uma resposta