Come fare una wp_query usando "BETWEEN" con due meta_values?

30 ott 2013, 20:21:36
Visualizzazioni: 21.1K
Voti: 6

Sto iniziando con WordPress, ho già realizzato alcune query, ma questa... uff! Mi sta dando del filo da torcere!

Quello che voglio fare è questa parte della query:

" ... WHERE "VALORE_CHE_VOGLIO" BETWEEN event_start_date AND event_end_date ..."

Dove "event_start_date" e "event_end_date" sono chiavi meta (voglio usare i loro valori, non i miei!)

Questo è quello che ho fatto finora...

$tEA = array(
    'post_type' => 'event',
    'meta_key' => $metaKey,
    'orderby' => 'meta_value',
    'order' => $order,
    'posts_per_page' => $postPerPage,
    'meta_query' => array(
        array(
            'key' => $metaKey,
            'value' => $today,
            'compare' => "=",
            'type' => 'DATE'
        ),
        array(
            'key' => '_event_end_time'
        )
    )
);
0
Tutte le risposte alla domanda 3
4

Questo dovrebbe funzionare per te:

$tEA = array(
    'post_type' => 'event',
    // non ti serve meta_key visto che usi meta_query
    //'meta_key' => $metaKey,
    'orderby' => 'meta_value',
    'order' => $order,
    'posts_per_page' => $postPerPage,
    'meta_query' => array(
        array(
            'key' => $metaKey,
            // il valore dovrebbe essere un array di (minimo, massimo) con BETWEEN
            'value' => array('START_DATE', 'END_DATE'),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        ),
    )
);

Nota che START_DATE e END_DATE devono essere nel formato data di MySQL YYYY-MM-DD

30 ott 2013 21:27:19
Commenti

+1 ma sono abbastanza sicuro che i timestamp UNIX vadano perfettamente bene.

kaiser kaiser
31 ott 2013 02:32:55

@kaiser Grazie, ma dato che il tipo di dati viene convertito in DATE, non sono sicuro che WP lo formatterà correttamente durante la costruzione della meta_query, quindi in questo caso è più sicuro usare direttamente il formato data di MySQL.

Ahmad M Ahmad M
31 ott 2013 12:54:40

Ahmad, grazie per la risposta, ma nel mio problema 'START_DATE' e 'END_DATE' dovrebbero essere il meta_value di questi campi. Ho un evento che ha "_event_start_date" e "_event_end_date", e sono meta_key.

Quello che voglio fare è un "BETWEEN" con questi due meta_value. Non voglio inserire manualmente i valori, perché questi valori sono meta_value.

Hehe..

Hor Hor
31 ott 2013 18:35:33

Se faccio quello che dici, guarda cosa stampa la query: "BETWEEN '_event_start_date' AND '_event_end_date')"

Hor Hor
31 ott 2013 18:39:02
3

Non l'ho testato, ma che ne pensi di questo?

$tEA = array(
    'post_type' => 'event',
    'meta_key' => $metaKey,
    'orderby' => 'meta_value',
    'order' => $order,
    'posts_per_page' => $postPerPage,
    'meta_query' => array(
        array(
            'key' => 'event_start_date',
            'value' => 'VALORE_CHE_VOGLIO',
            'compare' => '>='
        ),
        array(
            'key' => 'event_end_date',
            'value' => 'VALORE_CHE_VOGLIO',
            'compare' => '<='
        ),
        array(
            'key' => '_event_end_time'
        )
    )
);

Non sono sicuro se ti servisse l'altro confronto, se ti serve, aggiungilo pure :P

30 ott 2013 20:31:54
Commenti

in teoria dovrebbe funzionare... ma non lo fa =( Sto cercando di sistemarlo. Se qualcuno sa come fare, per favore, sentitevi liberi di postarlo!

Hor Hor
30 ott 2013 21:06:01

hai provato solo con l'array event_start_date? Perché non funziona? (nessun risultato?)

Toni Michel Caubet Toni Michel Caubet
30 ott 2013 21:18:08

Sì, nessun risultato. È proprio questo il punto, in teoria dovrebbe funzionare... ma non lo fa! hehe!

Hor Hor
31 ott 2013 18:36:42
1
-1

Da WP 3.7 puoi passare 'date_query' come argomento.

Esempio che restituisce i post dal 1 gennaio al 28 febbraio:

$args = array(
    'date_query' => array(
        array(
            'after'     => 'January 1st, 2013',
            'before'    => array(
                'year'  => 2013,
                'month' => 2,
                'day'   => 28,
            ),
            'inclusive' => true,
        ),
    ),
    'posts_per_page' => -1,
);
$query = new WP_Query( $args );

Codice tratto da https://codex.wordpress.org/Class_Reference/WP_Query

27 set 2017 14:38:36
Commenti

La domanda riguarda l'uso delle date nei metadati, non il campo data nella tabella dei post.

Milo Milo
27 set 2017 18:23:41