Como faço para pesquisar eventos entre duas datas definidas no WP?

3

Estou construindo um site do WP com um recurso de eventos. A página de eventos foi feita com tipos de postagem personalizados.

Eu quero possibilitar que as pessoas pesquisem / filtrem eventos por datas. Por exemplo, eles podem pesquisar todos os eventos que ocorrerem entre 2 de dezembro de 2011 e 1º de março de 2012 e obter resultados de eventos que tenham suas datas entre os meses de dezembro e março (ou seja, dezembro, janeiro, fevereiro e março). p>

Eu quero saber a melhor maneira de fazer isso. Alguma idéia?

Você pode ver um exemplo do que eu quero alcançar observando o recurso "Pesquisar eventos por data" nesta página enlace

Se isso não for possível, há alguma maneira de fazer com que eles pesquisem eventos que acontecem entre determinados meses, como dezembro e fevereiro (excluindo os dias)?

Obrigado antecipadamente.

    
por Sosthenes Kwame Boame 28.11.2011 / 04:09

2 respostas

8

Há duas coisas que você precisa fazer para que isso aconteça:

1) Crie metadados para os dados de cada evento

2) Consulta para as postagens usando meta_query

Para o nº 1, você precisa adicionar um metabox que permita ao usuário adicionar uma data para o evento. Esses dados devem ser armazenados como metadados usando o add_post_meta ou update_post_meta . Gostaria de incentivá-lo a ler sobre como adicionar metadados se você não estiver familiarizado com isso:

enlace http://www.wproots.com/complex-meta-boxes-in-wordpress/

Para # 2, supondo que você salvou os valores de data de uma maneira ordenada (por exemplo, AAAA-MM-DD), use o parâmetro meta_query de uma nova instância de WP_Query para obter o intervalo de datas apropriado. Esse método pressupõe que sua meta_key seja "_my-datetime-from". Por exemplo, você pode obter as postagens em outubro e novembro de 2011 com o seguinte:

// Set arguments for events
$start = '2011-11-31';
$end = '2011-10-01';
$args = array(
    'post_type' => 'my-event-type',
    'posts_per_page' => -1,
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_key' => '_my-datetime-from',
    'meta_query' => array(
        array(
            'key' => '_my-datetime-from',
            'value' => array($start, $end),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        )
    )
);
// Make the query
$events_query = new WP_query();
$events_query->query($args);
    
por tollmanz 28.11.2011 / 04:50
2

Como você armazena a data do evento: usando o campo post_date padrão da postagem ou um meta campo personalizado?

Se você estiver usando o padrão post_date , poderá usar o filtro posts_where para adicionar condições à pesquisa, da seguinte forma:

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
    // posts for March 1 to March 15, 2010
    $where .= " AND post_date >= '2010-03-01' AND post_date < '2010-03-16'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );

Para mais exemplos, confira o Codex .

No caso de usar o campo personalizado, eu acho que você tem que escrever suas próprias consultas personalizadas do MySQL. É um pouco mais complicado. Aqui está um exemplo:

global $wpdb;
$post_ids = $wpdb->get_col( "
    SELECT ID FROM {$wpdb->posts}
    JOIN {$wpdb->postmeta}
    WHERE ID=post_id
    AND meta_key='your_custom_meta_key'
    AND meta_value >= '2010-03-01'
    AND meta_value < '2010-03-16'
" );

foreach ( $post_ids as $post_id ) {
    $post = get_post( $post_id );
    // Do something
}
wp_reset_postdata();
    
por Anh Tran 28.11.2011 / 04:43