这是因为OR
上的关系meta_query
以及WordPress生成实际查询字符串的方式。你需要省去meta_key
和orderby
从查询参数和挂钩到posts_clauses
过滤器以修改where
和orderby
查询片段:
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\\U查询对象之前添加筛选器,然后确保在运行查询后将其删除,以免影响其他查询:
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: 使用
yy-mm-dd
ACF设置中日期字段的格式。(
yy-mm-dd
在JS/ACF中==
Y-m-d
在PHP/MySQL-datetime格式中)我已经更新了上面的代码。(已更新
$current_date
格式和添加
\'type\' => \'DATE\'
在里面
meta_query
)