Come cercare eventi tra due date specifiche in WordPress?

28 nov 2011, 05:09:09
Visualizzazioni: 33.5K
Voti: 4

Sto sviluppando un sito WordPress con una funzionalità per gli eventi. La pagina degli eventi è stata creata utilizzando custom post types.

Vorrei permettere agli utenti di cercare/filtrare gli eventi per date. Per esempio, poter cercare tutti gli eventi che si svolgono tra il 2 dicembre 2011 e il 1° marzo 2012 e ottenere risultati degli eventi che hanno le loro date tra i mesi di dicembre e marzo (cioè dicembre, gennaio, febbraio e marzo).

Vorrei sapere qual è il modo migliore per realizzarlo. Qualche idea?

Potete vedere un esempio di ciò che voglio ottenere guardando la funzione "Search events by date" su questa pagina http://www.londontown.com/events

Se questo non fosse possibile, c'è un modo per permettere la ricerca di eventi che si svolgono tra determinati mesi, ad esempio tra dicembre e febbraio (escludendo i giorni)?

Grazie in anticipo.

0
Tutte le risposte alla domanda 2
2
11

Ci sono due cose che devi fare per realizzare questo:

1) Creare i metadati per i dati di ogni evento

2) Interrogare i post utilizzando meta_query

Per il punto #1, devi aggiungere un metabox che permetta all'utente di inserire una data per l'evento. Questi dati devono essere salvati come metadati usando add_post_meta o update_post_meta. Ti consiglio di leggere riguardo l'aggiunta di metadati se non hai familiarità con il procedimento:

http://codex.wordpress.org/Function_Reference/add_meta_box http://www.wproots.com/complex-meta-boxes-in-wordpress/

Per il punto #2, assumendo che tu abbia salvato i valori delle date in un formato ordinabile (es. YYYY-MM-DD), puoi usare il parametro meta_query all'interno di una nuova istanza di WP_Query per ottenere l'intervallo di date desiderato. Questo metodo presuppone che la tua meta_key sia "_my-datetime-from". Ad esempio, puoi ottenere i post di ottobre e novembre 2011 con il seguente codice:

// Imposta gli argomenti per gli eventi
$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'
        )
    )
);
// Esegui la query
$events_query = new WP_query();
$events_query->query($args);
28 nov 2011 05:50:33
Commenti

Ok. Capisco, ma come posso aggiungerlo al modulo di ricerca in modo da non dover inserire manualmente le date nel codice. Sarà integrato nel modulo di ricerca in modo che gli utenti possano ottenere gli eventi selezionando le date. Grazie.

Sosthenes Kwame Boame Sosthenes Kwame Boame
29 nov 2011 04:13:44

Ok, penso di essere vicino alla soluzione. Ora ho questo nel mio file search.php http://www.pastebin.com/zMRwRihz e questo è ciò che c'è nel mio modulo di ricerca: http://www.pastebin.com/nZePhPHV Sto usando jquery ui datepicker per selezionare le date nel frontend (input di ricerca data). Questo è ciò che ottengo nell'URL dopo aver inviato una ricerca: http://localhost/wordpress3/?s=01%2F01%2F2011&ghes_event_start_timestamp=&s=12%‌​2F31%2F2011&ghes_event_end_timestamp=&_wpnonce=4cb83de127 Tuttavia, non vengono restituiti risultati. Hai qualche indizio su cosa impedisca la visualizzazione dei post? Grazie.

Sosthenes Kwame Boame Sosthenes Kwame Boame
12 dic 2011 17:47:40
3

Come memorizzi la data dell'evento: utilizzando il campo predefinito post_date del post o un campo meta personalizzato?

Se stai utilizzando il campo predefinito post_date, puoi usare il filtro posts_where per aggiungere condizioni di ricerca, come in questo esempio:

// Crea una nuova funzione di filtraggio che aggiungerà la nostra clausola WHERE alla query
function filter_where( $where = '' ) {
    // post dal 1° al 15 marzo 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' );

Per ulteriori esempi, consulta il Codex.

Nel caso utilizzi un campo personalizzato, immagino che tu debba scrivere le tue query MySQL personalizzate. È un po' più complicato. Ecco un esempio:

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 );
    // Fai qualcosa
}
wp_reset_postdata();
28 nov 2011 05:43:14
Commenti

Non è necessario utilizzare una query personalizzata per questo. Puoi semplicemente usare "meta_query".

tollmanz tollmanz
28 nov 2011 05:52:06

@rilwis Ok, penso di essere vicino alla soluzione. Ora ho questo nel mio file search.php http://www.pastebin.com/zMRwRihz e questo è ciò che c'è nel mio modulo di ricerca: http://www.pastebin.com/nZePhPHV Sto usando jQuery UI Datepicker per selezionare le date nel frontend (input di ricerca data). Questo è ciò che ottengo nell'URL dopo aver inviato una ricerca: http://localhost/wordpress3/?s=01%2F01%2F2011&ghes_event_start_timestamp=&s=12%‌​2F31%2F2011&ghes_event_end_timestamp=&_wpnonce=4cb83de127 Tuttavia, non vengono restituiti risultati. Hai qualche indizio su cosa stia impedendo la visualizzazione dei post? Grazie.

Sosthenes Kwame Boame Sosthenes Kwame Boame
12 dic 2011 17:48:40

hai inserito i valori delle date manualmente. come lo rendi dinamico, in modo sicuro?

ahnbizcad ahnbizcad
10 set 2015 10:44:30