Tôi cần sắp xếp (tùy chỉnh) bài đăng theo 2 giá trị trường tùy chỉnh ...
tên trường tùy chỉnh 1: is_sponsored
[giá trị có thể 1
hoặc 0
]
tên trường tùy chỉnh 2: sfp_date
[ timestamp
aka ngày đăng hiện tại tính bằng giây]
Các bài đăng có is_sponsored
giá trị "" là 1 cần được đặt lên hàng đầu, được sắp xếp theo " sfp_date
" theo DESC
thứ tự kết thúc. Tất cả các bài đăng khác có is_sponsored
giá trị "" là 0 nên được liệt kê bên dưới - theo thứ tự giảm dần (theo " sfp_date
").
Tôi có một cái gì đó như:
$sfp_query_args = array(
'tax_query' => array(
array(
'taxonomy' => 'sfp_posts',
'terms' => array( 1, 5, 8 )
)
),
'post_type' => 'sfpposts',
'post_status' => 'publish',
'showposts' => 15,
'paged' => $paged,
'meta_key' => 'sfp_date',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'meta_query' => array(
'key' => 'is_sponsored',
'value' => 2,
'type' => 'NUMERIC',
'compare' => '<='
)
);
$wp_q = new WP_Query( $sfp_query_args );
... nhưng không hoạt động. Có ý kiến gì không?
Biên tập Lưu ý: Đây là một plugin nhỏ sẽ hiển thị truy vấn trông như thế nào, vì chúng tôi có thể không có bất kỳ bộ dữ liệu nào có sẵn để kiểm tra điều này.
<?php
/** Plugin Name: (#67600) Dump Query parts */
function wpse67600_dump_query_parts( $pieces )
{
echo '<pre>'.var_export( $pieces, true ).'</pre>';
return $pieces;
}
add_filter( 'posts_clauses', 'wpse67600_dump_query_parts' );
OP VUI LÒNG THÊM VÀO PLUGIN TẠI ĐÂY - sử dụng liên kết "chỉnh sửa" .
EDIT của Bà
OK, sau khi theo dõi yêu cầu và nhiều cách giải quyết, tôi đã đưa ra ...
Nếu tôi đơn giản hóa "$ sfp_query_args" một chút thì kết quả gần với những gì được yêu cầu, tuy nhiên, không thể sắp xếp các bài đăng vẫn như cũ. Đây là:
$sfp_query_args1 = array(
'tax_query' => array( array( 'taxonomy' => 'sfp_post_category', 'terms' => $cat_id_arr ) ),
'post_type' => 'sfpposts',
'post_status' => 'publish',
'showposts' => (int)$per_page,
'paged' => $paged,
'meta_key' => 'is_sponsored',
'orderby' => 'meta_value date'
);
- * orderby có hai thuộc tính: meta_value và ngày *
Vì vậy, $ wpdb-> yêu cầu với các đối số trên trong truy vấn trông như thế này:
SELECT SQL_CALC_FOUND_ROWS $wpdb->posts.ID
FROM $wpdb->posts
INNER JOIN $wpdb->term_relationships
ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->postmeta
ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
WHERE 1=1
AND $wpdb->posts.post_type = 'sfpposts'
AND ($wpdb->posts.post_status = 'publish')
AND ($wpdb->postmeta.meta_key = 'is_sponsored' )
GROUP BY $wpdb->posts.ID
ORDER BY $wpdb->postmeta.meta_value, $wpdb->posts.post_date DESC
LIMIT 0, $per_page
Và cuối cùng, để có thể sắp xếp theo meta_value, truy vấn nên được đặt chỉ với một sự khác biệt nhỏ:
SELECT SQL_CALC_FOUND_ROWS $wpdb->posts.ID
FROM $wpdb->posts
INNER JOIN $wpdb->term_relationships
ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->postmeta
ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
WHERE 1=1
AND $wpdb->posts.post_type = 'sfpposts'
AND ($wpdb->posts.post_status = 'publish')
AND ($wpdb->postmeta.meta_key = 'is_sponsored' )
GROUP BY $wpdb->posts.ID
ORDER BY $wpdb->postmeta.meta_value [!ORDER MISSING!], $wpdb->posts.post_date DESC
LIMIT 0, $per_page
Vui lòng phát hiện chỗ giữ chỗ [! ĐẶT HÀNG!]. Tôi đoán ở trên nên giải thích chính xác nơi xảy ra vấn đề.