カスタム投稿タイプのUI拡張機能を使用して、 'date-debut'や 'date-fin'などのカスタムフィールド(拡張拡張カスタムフィールドで作成)を使用して入力される 'イベント'カスタム投稿タイプを作成しました。 。
この投稿タイプ専用のアーカイブページで、次の10件(現在または将来)のイベントを開始日順に表示します。
ソート部分はそれ自体で問題ないようです。しかし、日付にテストを追加しても動作しなくなり、とにかく動作しなくなります。
これが私のコードです:
$current_date = date('ymd');
$my_query = new WP_Query( array (
'post_type' => 'mna_event',
'posts_per_page' => 10,
'orderby' => 'meta_value_num',
'meta_key' => 'date_debut',
'order' => 'ASC',
'meta_query' => array (
'relation' => 'OR',
array (
'key' => 'date_debut',
'value' => $current_date,
'compare' => '>='
),
array (
'key' => 'date_fin',
'value' => $current_date,
'compare' => '>='
)
)
)
);
問題についてのアドバイスは大歓迎です。ありがとう
これはmeta_query
上のOR
リレーションとWordPressが実際のクエリ文字列を生成する方法が原因で起こります。クエリの引数からmeta_key
とorderby
を除外し、クエリのwhere
とorderby
の部分を変更するためにposts_clauses
フィルタにフックする必要があります。
function wpse_130954_orderby_fix($pieces){
global $wpdb;
$pieces['where'] .= " AND $wpdb->postmeta.meta_key = 'date_debut'";
$pieces['orderby'] = "$wpdb->postmeta.meta_value ASC";
return $pieces;
}
WP_Queryオブジェクトを設定する前にフィルタを追加し、他のクエリに影響を与えないように、クエリの実行後に必ずフィルタを削除してください。
add_filter( 'posts_clauses', 'wpse_130954_orderby_fix', 20, 1 );
$current_date = date_i18n('Y-m-d');
$my_query = new WP_Query( array (
'post_type' => 'mna_event',
'posts_per_page' => 10,
'meta_query' => array (
'relation' => 'OR',
array(
'key' => 'date_debut',
'value' => $current_date,
'compare' => '>=',
'type' => 'DATE'
),
array(
'key' => 'date_fin',
'value' => $current_date,
'compare' => '>=',
'type' => 'DATE'
)
)
)
);
$result = $my_query->posts;
remove_filter( 'posts_clauses', 'wpse_130954_orderby_fix', 20 );
UPDATE: / ACF設定の日付フィールドにyy-mm-dd
フォーマットを使う。 (JS/ACFのyy-mm-dd
= PHP/MySQLの日付/時刻形式のY-m-d
)この形式用に上記のコードを更新しました。 ($current_date
フォーマットを更新し、'type' => 'DATE'
にmeta_query
を追加)