Природне сортування за допомогою повідомлення meta_key - CSS-хитрощі

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

Це пряме редагування основного файлу: /wp-includes/query.php Зверніть увагу, знаки плюс у наведеному вище коді вказують нові рядки для додавання .

Примітки автора:

Клієнт хотів, щоб я налаштував спеціальне поле під назвою “Guide Rank”, що дозволило їм призначити №1 - 20 для списку барів, про які вони розміщували.

Після запуску запиту на повідомлення я виявив, що мета_значення оброблялося як рядок і як таке було змішано порядок сортування:

напр. 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 - тому, сподіваємось, після того, як він буде застосовано, не потрібно буде вручну редагувати файл.