web-dev-qa-db-ja.com

カスタムメタフィールドの日付クエリ

次のdate_queryに似たものを使用したいのですが、既存の投稿列の代わりにカスタムメタフィールドを使用したいと思います。例えばpost_date_gmtの代わりに、私が作成したメタキーdateをクエリしたいと思います。

言い換えれば、私はいくつかのメタフィールドを使用して私のcustom_post_typesをフィルタリングできるようにしたいです。 starting_dateまたはend_dateは管理インターフェースでそれらを表示します。すでにメインのWP_Queryをインターセプトしましたが、投稿列ではなくメタフィールドをどのようにフィルター処理できるかわかりません。

それができますか、それともメタクエリを作成するほうが良いですか?

// Any posts made over a year ago
// but modified in the past month
$some_posts = new WP_Query( array(
    'date_query' => array(
        array(
            'column' => 'post_date_gmt',
            'before' => '1 year ago',
        ),
        array(
            'column' => 'post_modified_gmt',
            'after'  => '1 month ago',
        )
    ),
    'posts_per_page' => -1,
) );
2
glarkou

カスタムフィールドを問い合わせるには meta_query を使う必要があります。順序付けや比較のためにカスタムフィールドに日付と時刻を格納する場合は、yyyy-mm-dd h:m:sの形式で、または unix timestamp として格納する必要があります。

2つのカスタムフィールドstartendがあり、特定の開始日と終了日の間に投稿を取得する必要がある場合は、次の方法を試してください。

$args = [
    'meta_query' => [
        [
            'key' => 'start',
            'value' => '2014-05-14'
            'compare' => '>=',
            'type' => 'DATE'
        ],
        [
            'key' => 'end',
            'value' => '2015-05-07',
            'compare' => '<=',
            'type' => 'DATE'
        ],
    ],
];

$q = new WP_Query( $args );

注意事項:

  • 上記は新しいshort配列の構文を使うのでPHP 5.4+を必要とします

  • 上記は全くテストされておらず、バグがあるかもしれません。携帯端末から投稿しています:-)

  • 上記で提供したリンクを読む

編集

未知のいくつかの面白い理由で、私はあなたのコメントの最後の部分を逃しました。

さらに、メタクエリの中にdate_queryを入れることができますか

答えは「いいえ」ですが、このように、同じクエリ内に日付とメタのクエリを含めることができます。

$args = [
    'date_query' => [[ /* Your date related stuff */]],
    'meta_query' => [[ /* Your custom field related stuff */ ]],
];
$q = new WP_Query( $args );
3
Pieter Goosen