次の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,
) );
カスタムフィールドを問い合わせるには meta_query
を使う必要があります。順序付けや比較のためにカスタムフィールドに日付と時刻を格納する場合は、yyyy-mm-dd h:m:s
の形式で、または unix timestamp として格納する必要があります。
2つのカスタムフィールドstart
とend
があり、特定の開始日と終了日の間に投稿を取得する必要がある場合は、次の方法を試してください。
$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 );