@@ -2033,6 +2033,7 @@
if ( !empty($q('meta_key')) ) ( $allowed_keys() = $q('meta_key'); $allowed_keys() = 'meta_value'; + $allowed_keys() = 'meta_value_num'; ) $q('orderby') = urldecode($q('orderby')); $q('orderby') = addslashes_gpc($q('orderby'));
@@ -2056,6 +2057,9 @@
case 'meta_value': $orderby = "$wpdb->postmeta.meta_value"; break; + case 'meta_value_num': + $orderby = "$wpdb->postmeta.meta_value+0"; + break; default: $orderby = "$wpdb->posts.post_" . $orderby; )
Đây là chỉnh sửa trực tiếp đối với tệp lõi: /wp-includes/query.php Lưu ý rằng các dấu cộng trong đoạn mã trên cho biết các dòng mới cần thêm .
Ghi chú của tác giả:
Một khách hàng muốn tôi thiết lập một trường tùy chỉnh có tên là “Xếp hạng hướng dẫn” cho phép họ chỉ định # 1 - 20 cho danh sách các Thanh mà họ đã đăng.
Sau khi chạy truy vấn bài viết, tôi nhận thấy rằng meta_value đang được coi là một chuỗi và như vậy thứ tự sắp xếp bị lộn xộn:
ví dụ. 1, 10, 2, 3css-trick.comC 7, 8, 9
Để WordPress / MySQL sử dụng “Thứ tự sắp xếp tự nhiên”, bạn chỉ cần áp dụng +0 cho tên trường và nó sẽ được coi là một số (ví dụ: meta_value + 0).
Để hành vi hiện tại không bị gián đoạn Tôi vừa thêm loại mới 'meta_value_num'.
Dòng truy vấn của tôi bây giờ trông giống như:
$guide_posts = new WP_Query("cat=12&meta_key=guide_rank&orderby=meta_value_num&order=ASC&showposts=10");
Trả về: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Điều này được đưa vào thân cây WordPress - vì vậy hy vọng khi nó được áp dụng, bạn sẽ không cần phải chỉnh sửa tệp theo cách thủ công.