我有一个自定义帖子类型,其中是否检查了某个meta_key,并且我想查询所有帖子,如果没有帖子已检查meta_key,并且是否选中了任何选项,则将该帖子放在所有帖子上方,例如wp粘性帖子功能(orderby)并在这些帖子之后也查询所有其他帖子。
这是我的pre_get_posts挂钩设置:
// Load our function when hook is set
add_action( 'pre_get_posts', function( $query ) {
// Check if on frontend and main query is modified
if( ! is_admin() && $query->is_main_query() && is_post_type_archive( 'clinical_evidence' ) ) {
$meta_key = 'paid';
$meta_value = 'yes';
$meta_query = array(
'relation' => 'OR',
array( //check to see if paid has been filled out
'key' => $meta_key,
'compare' => 'EXISTS',
'value' => $meta_value
),
array( //if no paid has been added show these posts too
'key' => $meta_key,
'compare' => 'NOT EXISTS',
'value' => ''
)
);
$query->set('meta_query', $meta_query);
$query->set('orderby', 'meta_value');
$query->set('meta_key', $meta_key);
}
});
我已经尝试过AND关系,但是不起作用。
所以我想要的是:如果帖子具有meta键(EXISTS),则将帖子放在查询中的第一位,然后放置所有其他帖子,如果没有,则将运行默认帖子查询。