web-dev-qa-db-fra.com

meta_query sur une plage de dates à l'aide d'un tableau de valeurs

Comment puis-je effectuer une requête pour renvoyer la publication si le tableau de champs personnalisés contient une date comprise dans la plage spécifiée? La requête ci-dessous correspond à ce que je recherche, mais cela ne fonctionne pas ...

// 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

J'avais besoin de publier avec le type event et le champ personnalisé "date" plus tard qu'aujourd'hui, cet exemple de code fonctionnait parfaitement pour moi, j'espère que cela aidera une personne se trouvant dans une situation similaire.

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

Je suggère de ne pas stocker les méta-valeurs sous la forme array car (je pense) n’est pas ce dont vous avez besoin. Je pense que vous devez vraiment stocker chaque méta-valeur individuellement avec sa propre paire clé/valeur et non une clé unique avec des valeurs sérialisées. Ceci fait, vous pouvez utiliser la comparaison BETWEEN:

$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