6

start_date と end_date のカスタム フィールドを含むカスタム投稿タイプ「イベント」があります。今後のイベントの簡単なリストを作成しようとしています。start_date >= 今日のイベントのみをクエリすると、正常に動作します。end_date <= 今日のすべてのイベントを「AND」するために meta_query を追加すると、何も返されません。

カスタム フィールド (start_date、end_date) は UNIX タイムスタンプとして保存されているため、'NUMERIC' と 'meta_value_num' を使用しています。$today は、現在の日付のタイムスタンプです。ここに私がやろうとしていることの例があります... 髪を引っ張る - どんな助けも大歓迎です!

これは機能します:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'start_date',
            'value' => $today,
            'compare' => '>=',
            'type' => 'NUMERIC',
        ),

    )
);

meta_query の 2 番目の配列を追加すると、動作しません:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'start_date',
            'value' => $today,
            'compare' => '>=',
            'type' => 'NUMERIC',
        ),
        array(
            'key' => 'end_date',
            'value' => $today,
            'compare' => '<=',
            'type' => 'NUMERIC',
        ),

    )
);

メインクエリでmeta_compareを使用し、単一のmeta_queryを使用すると、機能しません:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'meta_value_num' => $today,
    'meta_compare' => '>=',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'end_date',
            'value' => $today,
            'compare' => '<=',
            'type' => 'date',
        ),

    )
);

メインクエリで meta_compare を使用し、複数の meta_queries を使用すると、機能しません:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'meta_value_num' => $today,
    'meta_compare' => '>=',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'start_date',
            'value' => $today,
            'compare' => '>=',
            'type' => 'NUMERIC',
        ),
        array(
            'key' => 'end_date',
            'value' => $today,
            'compare' => '<=',
            'type' => 'NUMERIC',
        ),

    )
);
4

4 に答える 4

7

これが私がそれを使用している方法であり、私にとってはうまく機能しています。

$the_query = new WP_Query(array(
    'post_type' => 'job',
    'posts_per_page'   => 25,
    'meta_query' => array(
        array(
            'key' => 'published_date',
            'value' => array('20140401','20140405'),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        )
    )
));


if ($the_query->have_posts()) {

    echo '<ul>';
    while ($the_query->have_posts()) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';

} else {
    echo 'Sorry! No Posts';
}

wp_reset_postdata();

コーデックスに関する最も重要な注意事項。

'type' DATE は、'compare' 値 BETWEEN で機能するのは、日付がYYYYMMDD 形式で格納され、この形式でテストされている場合のみです。

于 2014-05-01T05:35:10.427 に答える
1

何をしようとしているのかわからないが、今日または将来 (start_date >= $today) に開始し、今日または過去 (end_date <= $today) に終了するイベントを選択しているため、何も返さないのは論理的に思えます...

于 2013-08-25T10:08:39.167 に答える
1

Alexandru-Florentin Popescuは正しいです!次の別のコードを使用します。

$args = array(  
'post_type' => 'events',
'posts_per_page' => -1,
'meta_key' => 'start_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
    'relation' => 'AND',
    array(
        'key' => 'start_date',
        'value' => $today,
        'compare' => '<=',
        'type' => 'NUMERIC',
    ),
    array(
        'key' => 'end_date',
        'value' => $today,
        'compare' => '>=',
        'type' => 'NUMERIC',
    ),

));

両方の配列でキー「比較」を変更するだけです

于 2018-09-15T15:26:11.980 に答える