1

自定义元查询未按元键正确排序帖子。如果我有订阅类型,那么这些帖子应该首先出现,然后那些元键的帖子不存在。

我正在尝试下面的代码,但它无法正常工作。

function apply_projects_query_filter ($query)
{

    if ($query->query_vars['post_type'] == 'post' && $query->is_main_query()) {

        $meta_query = array(
            'relation' => 'OR',
            array(
               'key'=>'subscription_type',
               'value'=>'subscription_type_yearly',
               'compare'=>'==',
            ),
            array(
               'key'=>'subscription_type',
               'value'=>'subscription_type_monthly',
               'compare'=>'==',
            ),
            array(
               'key'=>'subscription_type',
               'compare'=>'NOT EXISTS',
            )
        );
        $query->set('meta_query', $meta_query);
        //$query->set('meta_key', 'subscription_type'); 
        //if($query->query_vars['meta_key'] == 'subscription_type')
        //{
        $query->set('orderby', array('meta_value' => 'DESC', 'date' => 'DESC'));
        //}else{
           //$query->set('orderby', 'date');
       // }
        //if($query)
        //$query->set('orderby', 'meta_value title');

        //$query->set('order', 'DESC');
        return $query;
    }


    return $query;
}
4

1 回答 1

0

要对“元值”进行排序,必须在元查询之外提供元键(旧方式)。或者,使用 meta_query 时:

将选择的数组键(字符串)添加到 meta_query 子句,您要根据该值进行排序。

$meta_query = array(
    'relation' => 'OR',
    'sort_yearly' => array(
        'key'=>'subscription_type',
        'value'=>'subscription_type_yearly',
        'compare'=>'==',
    ),
) );
$query->set('orderby', array('sort_yearly' => 'DESC', 'date' => 'DESC'));
于 2019-10-01T15:35:28.810 回答