wake-up-neo.com

meta_query für einen Datumsbereich mit einem Array von Werten

Wie kann ich eine Abfrage durchführen, um den Beitrag zurückzugeben, wenn das benutzerdefinierte Feldarray ein Datum enthält, das innerhalb des angegebenen Bereichs liegt? Die folgende Abfrage ist im Grunde, was ich bin, aber es funktioniert nicht ...

// the income_dates array looks like this
// 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' => '<'
        ),
    )
); 
1
user537137

Ich musste später als heute einen Post mit dem Typ event und dem benutzerdefinierten Feld "date" erhalten. Dieses Codebeispiel funktionierte perfekt für mich. Ich hoffe, es hilft jemandem in einer ähnlichen Situation.

            $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,
                )
            );

Ich schlage vor, die Meta-Werte nicht als array zu speichern, da (glaube ich) nicht das ist, was Sie brauchen. Ich denke, Sie müssen wirklich jeden Meta-Wert einzeln mit einem eigenen Schlüssel/Wert-Paar und nicht mit einem einzelnen Schlüssel mit serialisierten Werten speichern. Wenn Sie dies auf diese Weise tun, können Sie den Vergleich BETWEEN verwenden:

$today = date("Y-m-d");
//'BETWEEN' comparison with 'type' date only works with dates in format YYYYMMDD.
//See 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'
         ),
     )
); 
0
cybmeta