Làm cách nào để query_posts sử dụng meta_query để đặt hàng meta_key VÀ có sắp xếp thứ cấp theo ngày?


8

Tôi đã khắc phục sự cố trong vài ngày qua và tiếp tục đi theo vòng tròn. Thực sự có thể sử dụng một đôi mắt mới để giúp tôi trả lời câu hỏi này ...

Vì vậy, tôi đang làm việc với một trang web wordpress nơi các bài đăng có một vài trường tùy chỉnh phù hợp với truy vấn tôi cần chạy: "hết hạn sau" và "thứ tự sắp xếp của tôi". Khi tôi chạy query_posts của mình, tôi muốn kết quả là các bài đăng trong đó "bài đã hết hạn" KHÔNG "có" (phần này hoạt động trong mã của tôi). Tôi cũng muốn các kết quả được sắp xếp theo giá trị số DESC của "my-sort-order" (cũng hoạt động) VÀ nếu có một ràng buộc về "thứ tự sắp xếp của tôi" tôi muốn sắp xếp thứ cấp theo ngày với các bài đăng gần đây nhất Đầu tiên.

Sắp xếp thứ cấp theo ngày là nơi tôi gặp khó khăn.

Đây là mã tôi có ngay bây giờ:

<?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 );
?>

Sử dụng mã ở trên, tôi lấy lại chính xác các bài đăng chưa hết hạn và chúng được sắp xếp theo thứ tự giảm dần theo thứ tự của tôi (tức là 100 hiển thị trước 99, v.v.). Nhưng nếu cả hai bài viết có cùng giá trị thứ tự sắp xếp thì sẽ có một số loại sắp xếp thứ cấp xảy ra mà tôi dường như không thể kiểm soát (và không thể hiểu được nó thực sự đang được sắp xếp trên đó).

Ý tưởng đầu tiên của tôi để giải quyết điều này là chỉ thêm các giá trị vào "thứ tự sắp xếp của tôi" nếu tôi muốn đặt một thứ tự sắp xếp cụ thể cho bài đăng đó. Tôi nghĩ rằng nếu giá trị cho trường này được để trống cho phần còn lại của bài viết, chúng sẽ chỉ được trả về theo thứ tự mặc định theo ngày DESC (sau các bài đăng có thứ tự sắp xếp đã đặt). Tuy nhiên, điều thực sự xảy ra là bất kỳ bài đăng nào không có bộ giá trị thứ tự sắp xếp đều KHÔNG được trả lại ...

Tiếp theo, tôi đã thử thêm nhiều giá trị trong trường thứ tự như thế này:

('orderby'=>'meta_value_num date')

Điều đó đã hoàn toàn thổi bay cả hai thứ tự sắp xếp mà tôi sắp thực hiện và trả lại các bài đăng một cách bất ngờ. Tôi có ấn tượng rằng nhiều giá trị thứ tự được cho phép, nhưng vì một số lý do, nó không hoạt động ở đây.

Tại thời điểm này, tôi không chắc làm thế nào để một trong những giải pháp tiềm năng này hoạt động. Có ai biết làm thế nào tôi có thể 1) Sắp xếp bài đăng theo trường "my-sort-order" trước không, sau đó có các bài đăng còn lại không có giá trị trong trường đó được trả về với sắp xếp ngày mặc định; hoặc 2) Tìm hiểu làm thế nào để kiểm soát thứ tự sắp xếp thứ cấp để bất kỳ bài đăng nào có ràng buộc về "thứ tự sắp xếp của tôi" sẽ được sắp xếp theo ngày (mới nhất trước)?

Câu trả lời:


2

Hy vọng rằng bạn đã tìm ra điều này ngay bây giờ, nhưng nếu bạn chưa có thể sử dụng bộ lọc "post_orderby" để quay số theo thứ tự cụ thể cho truy vấn của bạn. Tôi sẽ không đưa ra một giải pháp đầy đủ ở đây, nhưng bạn có thể tham khảo bài đăng này để biết thêm: http://mitcho.com/blog/how-to/external-nings-in-wordpress-queries/

BIÊN TẬP:

Đây là Tài liệu - về cơ bản, bạn chỉ có thể ghi đè mệnh đề ORDER BY của SQL: http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_orderby

Và đây là mã ví dụ từ các tài liệu:

add_filter('posts_orderby', 'edit_posts_orderby');
add_filter('posts_join_paged','edit_posts_join_paged');

function edit_posts_join_paged($join_paged_statement) {
$join_paged_statement = "LEFT JOIN wp_gdsr_data_article gdsra ON gdsra.post_id = wp_posts.ID";
return $join_paged_statement;   
}

function edit_posts_orderby($orderby_statement) {
$orderby_statement = "(gdsra.user_votes_total_sum/gdsra.user_votes_count) DESC";
return $orderby_statement;
}

Có, bộ lọc tests_orderby là những gì bạn đang tìm kiếm. Tôi sẽ chỉnh sửa câu trả lời bằng mã trên liên kết đó ...
mltsy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.