Agenda de eventos utilizando custom post type


(Anderson Mazuhovitz) #1

Bom dia a todos.

Criei uma agenda de eventos utilizando o custom post type, e estou com umas duvidas sobre umas melhorias que gostaria de fazer no sistema da agenda.

Estou utilizando o método de exibir posts agendados para definir a data do evento.
Por exemplo se o evento for 10/10/2010 agendo o post para 10/10/2010 - 23:58 assim o post irá ser publicado nesta data.

Como a pagina da agenda trabalha como o método de exibir posts agendados assim que for publicado deixara de ser exibido.

A agenda esta funcionando muito bem porem sempre que vou cadastrar um evento tenho que mudar a data e agendar o post. Para mim isso não é problema porem para o cliente pode gerar confusão.

Teria uma forma de criar um meta box com um campo data para por a data do evento e ao mesmo tempo agendar o posts para esta data?

Por exemplo o campo pegaria a data digitada 10/10/2010 e acrescentaria o hora 23:59 e agendaria o post sem ter que fazer manualmente?

Desde já, agradeço a atenção.


(Nick Lima) #2

Fala @mazuh, tudo bem? Vou tentar te dar uma luz de como proceder.

Você pode fazer o seguinte:

  • Cria um campo extra (meta field) para data de início e fim do evento (como data Y-M-D)
  • Na sua QUERY do WP, filtre por essas datas.

Porém tem um detalhe na sua lógica que deve ser revisto. Agendas geralmente mostram o evento mesmo antes de sua data de acontecimento. Assim as pessoas podem "abrir espaço em suas agendas" para ir ao evento. Além disso em um site, os usuários esperam poder ver mais detalhes do evento.

Assim acho que você deve publicá-los imediatamente e não fazer agendamentos. Para filtrar as datas basta você fazer um MERGE QUERY para filtrar e remover os itens que tiverem passado da data encerramento.

No loop da agenda para o Archive/Category você usa assim:

$get_data = date('Y-m-d'); //GET DATA ATUAL
global $wp_query; 

//Filtrar posts com data final maior ou igual a data atual
query_posts(array_merge(
    $wp_query->query,array(
        'posts_per_page' => -1, 
        'meta_key' => 'agenda_data',
        'meta_query' => array(
            array(
                'key'     => 'agenda_final',
                'value'   => $get_data,
                'compare' => '>=',
            )
        ), 'orderby' => 'meta_value', 'order' => 'ASC')
    )
);

Espero ter ajudado. Caso tenha algum problema pesquise como fazer comparações por meta_key ou pergunte aqui no fórum :wink:


(Anderson Mazuhovitz) #3

Obrigado @Nick ajudou bastante.
Assim que tiver um tempinho vou testar certinho e me aprofundar mais no assunto.

Em relação a exibir o evento antes da data estou utilizando um código que exibe ele a partir do momento em que ele foi agendado.

Utilizo este código no header da agenda.

    $my_query = new WP_Query(array('post_status'=>array('future')));
    if($my_query->have_posts())
    {
        while($my_query->have_posts()) : $my_query->the_post();
            global $post;
                trocaStatus($post->ID);
        endwhile;
    }

Porem vou testar o sistema que você mandou se conseguir fica bem mais simples para publicar os eventos.

Obrigado.