web-dev-qa-db-ja.com

値の配列を使用した日付範囲に対するmeta_query

カスタムフィールド配列に指定された範囲内の日付が含まれている場合に投稿を返すためのクエリを実行する方法を教えてください。以下のクエリは基本的に私がしているものですが、それは動作しません...

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

タイプイベントとカスタムフィールド "date"を今日よりも遅く投稿する必要がありました。このコードサンプルは私にとって完璧に機能しました。同様の状況で誰かに役立つことを願っています。

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

メタ値をarrayとして保存しないことをお勧めします。なぜなら(私は思う)必要なものではないからです。私はあなたが本当にシリアル化された値を持つ単一のキーではなくそれ自身のキー/値のペアでそれぞれのメタ値を個別に保存する必要があると思います。このようにすると、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