$args = array( \'post_type\' => \'bars\',
\'posts_per_page\' => -1
\'orderby\' => array( \'meta_value\' => \'DESC\', \'title\' => \'ASC\' ),
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'featured_venue\',
\'compare\' => \'NOT EXISTS\',
),
array(
\'relation\' => \'OR\',
array(
\'key\' => \'featured_venue\',
\'value\' => true,
),
array(
\'key\' => \'featured_venue\',
\'value\' => 0,
),
),
),
);
$query = new WP_Query($args);
我已经在上面查询了名为bars的帖子类型。bar CPT使用ACF通过ACF的True/False复选框使条形图具有特色(
https://www.advancedcustomfields.com/resources/true-false/) - ACF正在创建meta key featured\\u场馆。然而,由于ACF字段已添加到现有的帖子中,因此并非所有帖子都有元键。因此,我有以下post状态:
我的目标是首先列出所有场馆并具有特色场馆,然后按字母顺序列出所有其他场馆。但是,我的查询当前给出的结果如下:
按字母顺序排列的特色场馆帖子,带有特色场馆元键=按字母顺序排列的错误帖子,没有按字母顺序排列的特色场馆元键我尝试更改比较值,但未能获得所需的结果。相反,它总是删除带有meta\\u键的帖子,或者删除没有meta\\u键的帖子。
是否可以按我的预期方式修改查询,或者我是否需要将featured\\u venue元键批量添加到所有帖子?
最合适的回答,由SO网友:OriginalEXE 整理而成
这可以通过向ORDER BY
陈述
尝试在通话前添加此内容new WP_Query($args);
:
$setDefaultOrderby = function($statement) {
return str_replace(\'wp_postmeta.meta_value\', "COALESCE(wp_postmeta.meta_value, \'false\')", $statement);
};
add_filter(\'posts_orderby\', $setDefaultOrderby);
之后是:
remove_filter(\'posts_orderby\', $setDefaultOrderby);
更改
\'false\'
使用您需要的默认值。
我正在使用COALESCE
这里,它基本上选择了您传递给它的第一个参数NULL
, 本质上允许您为没有元键的帖子提供回退。