Мне нужно сделать многоуровневое упорядочение в запросе. Проблема заключается в упорядочении одного значения DESC, а другого ASC, как в SQL. Следующий SQL, кажется, дает мне то, что я хочу, когда я запускаю его в терминале:
SELECT DISTINCT * FROM wp_posts
INNER JOIN wp_postmeta
ON wp_posts.ID = wp_postmeta.post_id
WHERE wp_posts.post_type = 'post'
AND wp_postmeta.meta_key = 'pb_issue_featured'
AND wp_posts.post_status = 'publish'
ORDER BY wp_postmeta.meta_value DESC, wp_posts.menu_order ASC;
Это pb_issue_featured
логическое значение. Конечный результат, который мне нужен, - это запрос для отображения постов, которые имеют мета-значение 1 для этого поля вверху, а затем все остальные ниже. Затем назначается порядок второго уровня menu_order
(я использую плагин порядка типов постов).
Проблема в том, что мое логическое значение должно быть упорядочено по убыванию (от 1 до 0), но menu_order противоположен. То, что заказывается первым с помощью плагина, имеет порядок меню 1. Таким образом, использование встроенного порядка в WP_Query не работает. У кого-нибудь есть предложения? Я посмотрел на фильтр posts_orderby, но не смог его взять. Я не был уверен, где это должно быть применено или как я могу устранить неполадки. Это просто не изменило порядок, как у меня было.
Спасибо за помощь! Я опубликую фактический WP_Query, если он уместен, но я хотел, чтобы это было как можно короче.
Аргументы запроса:
$args = array(
'post_type' => 'post',
'meta_key' => 'pb_issue_featured',
'orderby' => 'meta_value',
'order' => 'DESC',
'post_status' => 'publish',
'posts_per_page' => $posts,
'paged' => $paged,
'meta_query' => array(
array(
'key' => 'headline',
'value' => 1,
'compare' => '!='
)
)
);
$q = new WP_Query($args);