meta_query su un intervallo di date utilizzando un array di valori

1 feb 2014, 10:37:48
Visualizzazioni: 14.5K
Voti: 2

Come posso eseguire una query che restituisca il post se l'array del campo personalizzato contiene una data compresa nell'intervallo specificato? La query qui sotto è fondamentalmente ciò che sto cercando di fare ma non funziona...

// l'array income_dates ha questo formato
// a:3:{i:0;s:10:"2014-02-01";i:1;s:10:"2014-03-01";i:2;s:10:"2014-03-29";}

$today = date("Y-m-d");
$date1 = date("Y-m-d", strtotime($today . "-1 Month"));
$date2 = date("Y-m-d", strtotime($today . "+1 Month"));

$args = array(
    'post_type' => 'income',
    'meta_query' => array( 
        array(
            'key' => 'income_dates',
            'value' => $date1,
            'type'  => 'date',
            'compare' => '>'
        ),
        array(
            'key' => 'income_dates',
            'value' => $date2,
            'type'  => 'date',
            'compare' => '<'
        ),
    )
); 
2
Commenti

Se hai bisogno di confrontare i dati, devi salvare le date in più meta. Per favore, fai riferimento al Codex per l'utilizzo di add_post_meta.

1fixdotio 1fixdotio
1 feb 2014 10:49:17

Okay, lo sto già facendo. Il campo personalizzato income_dates contiene le date dei redditi ricorrenti e pensavo che fosse meglio in un array, altrimenti il database potrebbe riempirsi abbastanza velocemente.

user537137 user537137
1 feb 2014 11:03:25
Tutte le risposte alla domanda 2
0

Dovevo ottenere i post di tipo evento con il campo personalizzato "data" successivo a oggi, questo frammento di codice ha funzionato perfettamente per me, spero possa aiutare qualcuno in una situazione simile.

            $today = date("Y-m-d");
            $today1 = date("Ymd", strtotime("$today"));
            $custom_meta = array(
                array(
                    'key' => 'data_de_inicio',
                    'value'=>$today1,
                    'compare'=>'>',
                    'type'=>'date',
                ),
            );
            $query = new WP_Query(array(
                'post_type'=>'event',
                'showposts'=>'3',
                'orderby'=>'meta_value',
                'meta_key'=>'data_de_inicio',
                'order'=>'asc',
                'meta_query'=>$custom_meta,
                )
            );
5 giu 2015 16:53:50
4

Suggerisco di non memorizzare i valori meta come array perché (penso) non sia ciò di cui hai bisogno. Credo che tu abbia effettivamente bisogno di memorizzare ogni valore meta individualmente con la sua coppia chiave/valore e non una singola chiave con valori serializzati. Quando fatto in questo modo, puoi utilizzare il confronto BETWEEN:

$today = date("Y-m-d");
//Il confronto 'BETWEEN' con 'type' date funziona solo con date in formato YYYYMMDD.
//Vedi http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters 
$date1 = date("YYYYMMDD", strtotime($today . "-1 Month"));
$date2 = date("YYYYMMDD", strtotime($today . "+1 Month"));

$args = array(
    'post_type' => 'income',
    'meta_query' => array( 
     array(
         'key' => 'income_dates',
         'value' =>  array($date1,$date2),
         'type'  => 'date',
         'compare' => 'BETWEEN'
         ),
     )
); 
1 feb 2014 13:13:14
Commenti

Grazie per la risposta e sì, potrebbe funzionare ma preferirei mantenere le date in un singolo record quindi ho semplicemente recuperato tutti i post e sto usando un'istruzione if per ottenere i risultati che mi servono

user537137 user537137
2 feb 2014 09:12:36

@user537137 puoi fornire un esempio del tuo codice?

Andrew Welch Andrew Welch
8 feb 2017 12:03:57

@AndrewWelch questo era 3 anni fa. Grazie per l'interesse ma non ricordo nemmeno per cosa servisse

user537137 user537137
9 feb 2017 12:28:17

Ora ho capito, ma la documentazione per le query meta che coinvolgono date è un po' frammentata, per usare un eufemismo.

Andrew Welch Andrew Welch
9 feb 2017 13:49:59