web-dev-qa-db-ja.com

日付付きのメタ値で投稿を取得する

私は "議題"と呼ばれる投稿タイプを持っています、そしてそのメタ値の1つはイベントの日付です。メタ値に基づいて今年の投稿を取得する方法を教えてください。

私は上記の引数を試してみましたが、うまくいきません。

$args = array(  'post_type' => 'agenda',
                'posts_per_page' => -1,
                'sort_order' => 'asc',
                'meta_query' => array(
                    array(
                        'key' => 'date_event',
                        'value' => date('Y'),
                        'compare' => '=',
                        'type' => 'DATETIME'
                    )
                ),
                'meta_key' => 'date_event',
                'meta_type' => 'DATE',
                'orderby' => 'meta_value',
                'order' => 'ASC',
                'tax_query' => array(
                    array(
                    'taxonomy' => 'event_type',
                    'field' => 'term_id',
                    'terms' => $type_name)
                )
);
1
Thales Andrade

'date_event'ポストメタフィールドから戻ってきたものによります。

それがおそらくここでの犯人です - それが月と日を含む実際の日付であるならば、それはあなたが日付( 'Y')から得ているものと一致するつもりはない、それは単に '2018'になるでしょう。

次のいずれかの議題の投稿で、 'date_event'の値を確認できます。

print_r(get_post_meta($ post_id、 'date_event'、true));

'date_event'の値がUnixのタイムスタンプの場合は、今年の1月1日から始まるすべての日付を照会することができるため、実際には簡単です。

$first_of_year = strtotime( "1 January " . date( 'Y' ) );

$args = array(  'post_type' => 'agenda',
    'posts_per_page' => -1,
    'meta_key' => 'date_event',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'date_event',
            'value' => $first_of_year,
            'compare' => '>=',
        ).
    ),
    'tax_query' => array(
        array(
           'taxonomy' => 'event_type',
           'field' => 'term_id',
           'terms' => $type_name,
        )
    )
);

Date_eventが20180320のような値を与えているのなら、似たようなことができますが、.

$first_of_year = date( 'Y' ) . '0101';

'2018-03-29'のようなものになっているのであれば、 'type' => 'DATE'を使用する必要があるかもしれませんが、最初の2つの状況のどちらかがあれば、それは不要です。

もう1つ、「sort_order」は有効なパラメータではありませんが、無視されることになります。あなたはとにかく低くした 'order'が欲しいのです。

数値を比較するときは、 'orderby' => 'meta_value'を 'orderby' => 'meta_value_num'に変更することをお勧めします。

2
slashbob