WordPress pre_get_posts meta_query如果元键存在,则查询全部

时间:2019-04-06 08:36:22

标签: php wordpress meta-query

我有一个自定义帖子类型,其中是否检查了某个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),则将帖子放在查询中的第一位,然后放置所有其他帖子,如果没有,则将运行默认帖子查询。

0 个答案:

没有答案