私は " Films "というカスタム投稿タイプを持ち、 " Showings "というRepeaterフィールドはDateTime型のフィールド " start_datetime "を持っています...
今後7日以内に、上映されているすべてのフィルムを取得するためのクエリを実行したいのですが、それらを表示のstart_datetime順に並べたいと思います。
私はこのクエリを持っています:
$query = new \WP_Query( array(
'numberposts' => -1,
'post_type' => 'film',
'meta_key' => 'showings_%_start_datetime',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'showings_%_start_datetime',
'value' => array( time(), strtotime( '+7 days' ) ),
'type' => 'NUMERIC',
'compare' => 'BETWEEN'
)
)
));
これは、次の7日間に上映されているすべての映画を正しく取得しますが、その後、最初の上映のstart_datetimeの順に並べますFIRST FUTURE表示中のstart_datetime順に並べ替えてください。
例:
映画Aは今日上映されています。
映画Bは明日、もう1年前に上映されます。
私の結果は次のとおりです。フィルムB、次にフィルムA(実際にはフィルムBが上映開始の延期を伴うものであるため)。しかし、映画Aは最初の未来を映し出した映画だからです。..
WP_Query
によって作成された実際のSQLを調べることによって問題を発見しました。生成されたSQLクエリには2つの内部結合があり、1つはmeta_key
用で、もう1つは実際のmeta_query
用です。
基本的には、次の7日間にshowings_%_start_datetime
を持つフィルムをフィルタリングすることと、他方で(独立して)フィルムをshowings_%_start_datetime
値で順序付けることです。
meta_query
パラメータを baseクエリ に移動するだけで正常に動作します。
query = new \WP_Query( array(
'numberposts' => -1,
'post_type' => 'film',
'meta_key' => 'showings_%_start_datetime',
'meta_value' => array( time(), strtotime( '+7 days' ) ),
'meta_type' => 'NUMERIC',
'meta_compare' => 'BETWEEN',
'orderby' => 'meta_value_num',
'order' => 'ASC',
));