¿Cómo busco eventos entre dos fechas establecidas dentro de WP?

3

Estoy creando un sitio WP con una función de eventos. La página de eventos se realizó con tipos de publicación personalizados.

Quiero que las personas puedan buscar / filtrar eventos por fechas. Por ejemplo, pueden buscar todos los eventos que ocurren entre el 2 de diciembre de 2011 y el 1 de marzo de 2012 y obtener resultados de los eventos que tienen sus fechas entre los meses de diciembre y marzo (es decir, diciembre, enero, febrero y marzo). p>

Quiero saber la mejor manera de hacerlo. ¿Alguna idea?

Puede ver un ejemplo de lo que quiero lograr al ver la función "Buscar eventos por fecha" en esta página enlace

Si eso no es posible, ¿hay alguna forma de hacer que busquen eventos que ocurren entre ciertos meses, por ejemplo, diciembre y febrero (excluyendo los días)?

Gracias de antemano.

    
pregunta Sosthenes Kwame Boame 28.11.2011 - 04:09

2 respuestas

8

Hay dos cosas que debes hacer para que esto suceda:

1) Cree metadatos para los datos de cada evento

2) Consulta de las publicaciones usando meta_query

Para el # 1, debe agregar un metabox que le permita al usuario agregar una fecha para el evento. Estos datos deben almacenarse como metadatos utilizando add_post_meta o update_post_meta . Le animo a leer sobre agregar metadatos si no está familiarizado con cómo hacerlo:

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

Para el # 2, suponiendo que haya guardado los valores de fecha de una manera ordenada (por ejemplo, YYYY-MM-DD), puede usar el parámetro meta_query dentro de una nueva instancia de WP_Query para obtener el rango de fechas apropiado. Este método asume que su meta_key es "_my-datetime-from". Por ejemplo, puede obtener las publicaciones en octubre y noviembre de 2011 con lo siguiente:

// 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);
    
respondido por el tollmanz 28.11.2011 - 04:50
2

¿Cómo almacena la fecha del evento: utilizando el campo post_date predeterminado de la publicación o un meta campo personalizado?

Si está utilizando el post_date predeterminado, puede usar el filtro posts_where para agregar condiciones para la búsqueda, como esta:

// 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 obtener más ejemplos, consulte Codex .

En caso de usar un campo personalizado, supongo que tienes que escribir tus propias consultas personalizadas de MySQL. Es un poco más complicado. Aquí hay un ejemplo:

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();
    
respondido por el Anh Tran 28.11.2011 - 04:43

Lea otras preguntas en las etiquetas