Естественная сортировка с использованием сообщения 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 для списка баров, о которых они публикуют.

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