Natūralus rūšiavimas naudojant „Post“ meta_key - CSS-gudrybės

Anonim

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

Tai yra tiesioginis pagrindinio failo redagavimas : /wp-includes/query.php Atkreipkite dėmesį, kad aukščiau esančiame kode esantys pliuso ženklai rodo naujas pridėtinas eilutes .

Autoriaus pastabos:

Klientas norėjo, kad aš nustatyčiau pasirinktinį lauką, vadinamą „Gido reitingas“, kuris leistų jiems priskirti # 1 - 20 juostų, apie kurias jie skelbė, sąrašą.

Paleidęs pranešimų užklausą radau, kad meta_value buvo traktuojama kaip eilutė ir todėl rūšiavimo tvarka buvo sumaišyta:

pvz. 1, 10, 2, 3css-gudrybės.com C 7, 8, 9

Norint, kad „WordPress“ / „MySQL“ naudotų „Natūralią rūšiavimo tvarką“, lauko pavadinime tiesiog reikia taikyti +0 ir jis bus traktuojamas kaip skaičius (pvz., Meta_value + 0).

Kad esamas elgesys nenutrūktų, aš ką tik pridėjau naują tipą „meta_value_num“.

Dabar mano užklausos eilutė atrodo taip:

$guide_posts = new WP_Query("cat=12&meta_key=guide_rank&orderby=meta_value_num&order=ASC&showposts=10");

Kuris grįžta: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Tai turi būti įtraukta į „WordPress“ bagažinę - todėl tikimės, kad ją pritaikius, nereikės rankiniu būdu redaguoti failo.