wordpress advanced date queries

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

Posts Similares

  • Inverta a ordem dos comentários em seu WordPress

    Por padrão o WordPress exibe os comentários na ordem cronológica (mais antigos para os mais novos). Especialmente para blogs com um grande número de comentários, pode ser interessante inverter esta ordem para mostrar os comentários mais novos primeiro. É claro que temos plugins que fazem isso, mas com uma simples edição em seu arquivo comments.php…

  • Configurações adicionais no wp-config.php

    O wp-config.php é o arquivo de configuração do WordPress, onde definimos basicamente as informações de conexão com o banco de dados e algumas outras coisinhas. Vamos mostrar que há muita coisa útil para o seu site que pode ser definida aqui. A princípio, o arquivo original ‘wp-config-sample.php’ contém apenas algumas constantes que precisamos ou podemos…

  • Exibindo a quantidade de comentários do Facebook em seu post

    ATENÇÃO: A API do Facebook foi alterada em Agosto de 2016, por isso a quantidade não é mais exibida e assim este código não funciona mais. Como não ficou claro se essa mudança é em definitivo ou não, mantivemos a postagem aqui mas provavelmente ela não funcionará mais. Em um dos projetos que trabalhei recentemente,…

  • Alterando o link de login do WordPress

    Como já é de conhecimento de todos que estão familiarizados com nosso querido WordPress, a url padrão para login em nosso sistema é: Entretanto, quando fazemos um site em WordPress para um cliente a coisa já caminha de um modo diferente. Sim minha gente, já recebi ligação perguntando “Como eu entro mesmo no WordPress ?…

  • Evite que seu WordPress de dicas aos invasores!

    Já reparou que na página de login de seu WordPress, quando você erra o login ou a senha o sistema avisa o que você errou ? Tudo bem, é um recurso até bacana, simpático… mas também é uma ótima dica para os invasores ! Com isso, eles poderão saber aonde estão errando na hora de…

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

2 Comentários

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