O que você está procurando?

Aperte Enter para buscar ou ESC para fechar

Entendendo o Date Query no WordPress 3.7

3 min de leitura
wordpress advanced date queries

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

Compartilhar este artigo
Guga Alves

Guga Alves

• WordPress e web

Desbravando o mundo WordPress desde 2007, me especializei também em SEO e entreguei grandes projetos no mercado brasileiro para a partir de 2015 me dedicar ao mercado fora do Brasil. Trabalhei na empresa do criador do WordPress por 4 anos (no WordPress.com, da Automattic) e mais 4 anos em uma das maiores empresas de hospedagens do mundo, a Liquid Web, gerenciando uma equipe de suporte do plugin The Events Calendar. No Brasil, atendi grandes marcas como canal Futura, Corpo Perfeito, Catraca Livre, Hostgator Brasil e Hostnet, também palestrei em diversos eventos e dei aula em cursos livres e pós-graduação (no Rio de Janeiro e em Brasília). Trabalho remoto, viajo bastante, mas minha base é no Rio de Janeiro/RJ.

X GitHub Sobre mim
Leituras Complementares

Continue lendo

Ver todos em Dicas WordPress →

Discussão & Respostas (2)

Espaço moderado para debates técnicos
  1. César Henrique
    César Henrique
    ↳ Responder

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

  2. Israel
    Israel
    ↳ Responder

    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 sua contribuição técnica

Seu e-mail não será publicado. Blocos de código em markdown são aceitos com crases triplas.