Tôi cần phải thực hiện đặt hàng đa cấp trong một truy vấn. Vấn đề là với việc đặt hàng một giá trị DESC và ASC khác như trong SQL. SQL sau đây dường như cung cấp cho tôi những gì tôi muốn khi tôi chạy nó trong thiết bị đầu cuối:
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;
Đây pb_issue_featured
là một giá trị boolean. Kết quả cuối cùng tôi cần là truy vấn để hiển thị các bài đăng có giá trị meta là 1 cho trường này ở trên cùng, sau đó tất cả các mục khác dưới đây. Sau đó, thứ tự tầng thứ hai là chỉ định menu_order
(Tôi đang sử dụng plugin thứ tự loại bài đăng).
Vấn đề là giá trị boolean của tôi cần phải được sắp xếp từ cao đến thấp (1 đến 0) nhưng menu_order thì ngược lại. Những gì được đặt hàng đầu tiên với plugin có thứ tự menu là 1. Vì vậy, sử dụng 'orderby' tích hợp trong WP_Query không hoạt động. Bất cứ ai có đề nghị? Tôi đã xem xét bộ lọc 'post_orderby' nhưng không thể lấy nó. Không thực sự chắc chắn nơi nào nên được áp dụng hoặc làm thế nào tôi có thể khắc phục sự cố. Nó chỉ không đặt hàng theo cách tôi đã có nó.
Cảm ơn đã giúp đỡ! Tôi sẽ đăng WP_Query thực tế nếu nó có liên quan nhưng tôi muốn giữ nó càng ngắn càng tốt.
Các truy vấn lập luận:
$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);