@@ -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; )
Aceasta este o editare directă la un fișier de bază: /wp-include/query.php Rețineți că semnele plus din codul de mai sus indică noi linii de adăugat .
Note despre autor:
Un client a dorit ca eu să configurez un câmp personalizat numit „Ghid de rang”, care le-a permis să aloce numărul 1 - 20 pentru o listă de bare despre care postau.
După ce am executat interogarea de postări, am constatat că valoarea meta_valor era tratată ca un șir și ca atare ordinea de sortare a fost amestecată:
de exemplu. 1, 10, 2, 3css-tricks.comC 7, 8, 9
Pentru ca WordPress / MySQL să utilizeze „Ordine de sortare naturală” trebuie doar să aplicați +0 la numele câmpului și va fi tratat ca un număr (de exemplu, meta_value + 0).
Pentru ca comportamentul existent să nu fie întrerupt tocmai am adăugat noul tip „meta_value_num”.
Linia mea de interogare arată acum:
$guide_posts = new WP_Query("cat=12&meta_key=guide_rank&orderby=meta_value_num&order=ASC&showposts=10");
Care returnează: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Acest lucru este inclus pentru a fi inclus în portbagajul WordPress - așa că sperăm că odată ce va fi aplicat nu ar trebui să fie nevoie să editați manual fișierul.