@@ -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; )
Αυτή είναι μια άμεση επεξεργασία σε ένα βασικό αρχείο: /wp-includes/query.php Σημειώστε ότι τα σύμβολα συν στον παραπάνω κώδικα υποδεικνύουν νέες γραμμές για προσθήκη .
Σημειώσεις συγγραφέα:
Ένας πελάτης ήθελε να εγκαταστήσω ένα προσαρμοσμένο πεδίο που ονομάζεται "Οδηγός κατάταξης" που τους επέτρεψε να αντιστοιχίσουν # 1 - 20 για μια λίστα με μπαρ για τα οποία δημοσιεύονταν.
Μετά την εκτέλεση του ερωτήματος αναρτήσεων, διαπίστωσα ότι το meta_value αντιμετωπίστηκε ως συμβολοσειρά και ως εκ τούτου η σειρά ταξινόμησης μπέρδεψε:
π.χ. 1, 10, 2, 3css-tricks.comC 7, 8, 9
Για να αποκτήσετε το WordPress / MySQL να χρησιμοποιεί τη "Φυσική παραγγελία" απλά πρέπει να εφαρμόσετε το +0 στο όνομα του πεδίου και θα αντιμετωπίζεται ως αριθμός (π.χ. meta_value + 0).
Για να μην διακοπεί η υπάρχουσα συμπεριφορά, μόλις πρόσθεσα τον νέο τύπο «meta_value_num».
Η γραμμή ερωτημάτων μου μοιάζει τώρα:
$guide_posts = new WP_Query("cat=12&meta_key=guide_rank&orderby=meta_value_num&order=ASC&showposts=10");
Που επιστρέφει: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Αυτό ισχύει για συμπερίληψη στον κορμό του WordPress - οπότε ελπίζουμε ότι μόλις εφαρμοστεί, δεν θα πρέπει να απαιτείται χειροκίνητη επεξεργασία του αρχείου.