Сообщения не сортируются на основе значений мета-ключей - PullRequest
1 голос
/ 01 октября 2019

Пользовательский мета-запрос неправильно сортирует сообщения по мета-ключам. Если у меня есть тип подписки, то эти сообщения должны идти первыми, после этого сообщения для этих мета-ключей не существуют.

Я пытаюсь использовать приведенный ниже код, но он работает неправильно.

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;
}

1 Ответ

0 голосов
/ 01 октября 2019

Для сортировки по 'meta_value' мета-ключ должен быть предоставлен за пределами meta_query (по-старому). ИЛИ, при использовании 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'));
...