В течение последних нескольких дней я решал проблему и продолжаю ходить по кругу. Могли бы действительно использовать свежую пару глаз, чтобы помочь мне ответить на этот вопрос ...
Так что я работаю с сайтом WordPress, где у постов есть несколько пользовательских полей, относящихся к запросу, который мне нужно выполнить: «post-expired» и «my-sort-order». Когда я запускаю свои query_posts, я хочу, чтобы результаты были сообщениями, где «истек срок действия» НЕ «да» (эта часть работает в моем коде). Я также хочу, чтобы результаты сортировались по числовому значению DESC "my-sort-order" (работает также) И если есть связь с "my-sort-order", я бы хотел вторичную сортировку по дате с последними публикациями первый.
Вторичная сортировка по дате - вот где у меня проблемы.
Вот код, который я сейчас имею:
<?php
$args = array(
'paged' => $paged,
'meta_query'=> array(
array(
'key'=>'post-expired',
'value'=> 'yes',
'compare' => '!='
)
),
'meta_key'=>'my-sort-order',
'orderby'=>'meta_value_num',
'order'=>'DESC'
);
$args = array_merge( $args , $wp_query->query );
query_posts( $args );
?>
Используя приведенный выше код, я корректно получаю сообщения с истекшим сроком действия, и они сортируются по убыванию my-sort-order (т. Е. 100 отображается до 99 и т. Д.). Но если обе записи имеют одинаковое значение порядка сортировки, происходит некоторый тип вторичной сортировки, которую я не могу контролировать (и не могу понять, на что она в действительности сортируется).
Моей первой идеей для решения этой проблемы было добавление значений в «my-sort-order», только если я хотел установить определенный порядок сортировки для этого поста. Я подумал, что если значение для этого поля оставить пустым для остальных сообщений, они будут просто возвращены в сортировке по умолчанию к дате DESC (после сообщений с установленным порядком сортировки). Однако в действительности все сообщения, для которых не было задано значение порядка сортировки, НЕ были возвращены вообще ...
Затем я попытался добавить несколько значений в поле orderby следующим образом:
('orderby'=>'meta_value_num date')
Это полностью взорвало оба порядка сортировки, на которые я рассчитывал, и неожиданно вернуло посты. У меня сложилось впечатление, что допускается несколько значений orderby, но по какой-то причине это здесь не работает.
На данный момент я не уверен, как заставить любое из этих потенциальных решений работать. Кто-нибудь знает, как я могу 1) Сортировать сообщения сначала по полю «my-sort-order», а затем вернуть оставшиеся сообщения без значения в этом поле с сортировкой по умолчанию; или 2) Узнайте, как управлять вторым порядком сортировки, чтобы любые сообщения, имеющие привязку к «my-sort-order», были отсортированы по дате (сначала самые новые)?