web-dev-qa-db-ja.com

数値によるWP_Query meta_queryのフィルタリングは機能しません

とても濃いタイトルでした。

Advanced Custom Fieldsプラグインのおかげで、日付/時刻ピッカーフィールド "event_date"を持つカスタム投稿タイプ "event"があります。この日時ピッカーは、UNIXタイムスタンプをデータベースに保存します。私はWP_Queryを使用して、今日または将来のすべてのイベントを取得しようとしています。これは私が今持っているコードです:

$args = Array(
    'post_type'         => 'event',
    'posts_per_page'    => -1,
    'meta_key'          => 'event_date',
    'orderby'           => 'meta_value_num',
    'order'             => 'ASC',
    'meta_query'        => array(
                'key'       => 'event_date',
                'compare'   => '>=',
                'value'     => intval(strtotime(date('Y-m-d'))),
                'type'      => 'numeric'
    ),
);

$query = new WP_Query( $args );

それは過去と未来の全ての出来事を私に与えています。

タイムスタンプは文字列としてデータベースに格納されるので、 'compare' => '> ='は通常は機能しませんが、GoogleやCodexで 'type' => 'numeric'と読んだもの文字列を整数にキャストし、午前0時に今朝の私の値と比較できるようにします。残念ながらそれはうまくいっていないようで、私はその理由を理解していません。

2
Ryan Giglio

メタクエリで配列の配列を試してください。

$args = Array(
    'post_type'         => 'event',
    'posts_per_page'    => -1,
    'meta_key'          => 'event_date',
    'orderby'           => 'meta_value_num',
    'order'             => 'ASC',
    'meta_query'        => array(
         array(
                'key'       => 'event_date',
                'compare'   => '>=',
                'value'     => intval(strtotime(date('Y-m-d'))),
                'type'      => 'numeric'
         )
    ),
);

$query = new WP_Query( $args );
7
Kailey Lampert

うわー、あなたはこの答えで私の一日を救った、私はtype_priceと呼ばれるカスタム数値フィールドで投稿をフィルターにかけようとしていた、そして私はそのようにそれをしようとしていた:

'meta_query' => array(
    array(
        'key' => 'type_price',
        'value' => array( 0, 500000 ),
        'compare' => 'BETWEEN',
        'type' => 'NUMERIC',
 )),

しかしそれはASCそれをするためにこの方法であるべきです:

array(
   'posts_per_page' => -1, 
   'meta_key' => 'type_price', 
   'orderby'  => 'meta_value_num', 
   'order' => 'ASC', 
       'meta_query' => array(
           array(
                'key' => 'type_price',
                'value' => array( 0, 500000 ),
                'compare' => 'BETWEEN',
                'type' => 'NUMERIC',
            )
        )),

どうもありがとう :)

0
user91935