Intereting Posts
Пользовательский метабокс timepicker не сохраняет данные Используя метод GetMediaLibrary () в python-wordpress-xmlrpc.media, как выполнить итерацию результата? Перемещение существующей установки WordPress в Multisite Страница не отображается в панели навигации Добавить фильтр не работает с get_posts Ошибка перевода плагинов Как заставить WordPress использовать новые параметры Путь загрузки в Multisite Setup Измените цикл WordPress после его запуска Использование $ wpdb для извлечения сообщений с метаданными Адреса электронной почты WordPress Крюк / действие после WP_Query получает сообщения для запроса пользовательских таблиц для метаданных Проблема с get_next_post () get_previous_post (), возвращающая значение null опубликовать конкретные пункты меню по двадцать шестнадцати темам Есть ли способ создать псевдоним без использования htacess, permalinks или вникания в код? как работает wordpress smtp? моя электронная почта не работает

get_terms orderby имя как цифры

У меня есть обычная таксономия, заполненная такими терминами, как «том 1», «том 2», «выпуск 1», «выпуск 2», «выпуск 10» и список возвратов имени get_terms как: выпуск 1, выпуск 10, выпуск 2 хотя мне нужно, чтобы это был выпуск 1, выпуск 2, выпуск 10

Я попытался найти wp.stackexchange и использовать мой google-fu безрезультатно. Любая помощь будет принята с благодарностью.

На форуме есть много похожих сообщений, если вы посмотрите вокруг.

У вас нет номеров . Поэтому вы не можете сортировать численно. Вы должны сортировать по алфавиту, и это даст вам образец, который вы видите. Я, честно говоря, даже не уверен, поддерживает ли get_terms числовую сортировку (с get_terms взгляда, я бы сказал, это не так), поскольку я сомневаюсь, что многие термины полностью состоят из чисел.

У вас есть несколько вариантов.

  1. Напишите свой собственный SQL-запрос. Я думаю, но я не уверен, вы можете сделать это в чистом SQL, но это было бы сложно: вам нужно было бы подстроить имя и сортировку. Это было бы волосатым и, вероятно, не очень эффективным.
  2. Если вы вытягиваете несколько терминов за раз, вы можете отсортировать их на PHP, прежде чем отображать их. Вам нужно будет сделать то же самое, что и в SQL, и substr имя, сортировать и поместить его обратно. Любое разбиение на страницы было бы проблематичным при таком подходе.

Я знаю, что этот пост очень старый, но все еще отвечающий за других, которые сюда попадают.

Ниже приведен очень простой фильтр для сортировки терминов как чисел. Вам нужно только установить переменную $taxonomy_to_sort с taxonomy slug и поместить ее в functions.php вашей темы.

 add_filter( 'get_terms_orderby', 'terms_order_as_number', 10, 3); function terms_order_as_number($order_by, $args, $taxonomies){ $taxonomy_to_sort = "numbers"; if(in_array($taxonomy_to_sort, $taxonomies)){ $order_by .= " * 1"; } return $order_by; } 

Где эти проблемы коренятся?

Во-первых, вы просите сортировать часть, которая находится внутри некоторой строки. Это не родная функциональность на любом языке программирования .

Во-вторых, ваша фактическая проблема заключается не в «сортировке по числу», а в том, как вы построили эти числа. Если бы вы знали эту проблему впереди (и учитывали ее), вы могли бы написать фильтр, который будет заполнять эти нули перед вашими числами.

Как игнорировать фактическую проблему и обойти ее.

Это на самом деле не устраняет проблему, но поскольку мы (и, возможно, вы тоже) не знаете, сколько «проблем» вы можете придумать (10, 1k, 100k?), Мы просто добавляем сортировку при отображении Это. Вот тег шаблона, который вы можете использовать:

 function wpse80063_numsorted_issues() { $terms = get_terms( 'issues', array( /* of possible args */ ); $digits = strlen( count( $terms ) ); $sorted_terms = array(); foreach ( $terms as $term ) { preg_match( "/\d+/", $term, $nr ); $nr = sprintf( "%0{digits}d", $nr ); // If the above line doesn't work, take this one: // $nr = str_pad( $nr, $digits, "0", STR_PAD_LEFT ); $sorted_terms[ $nr ] = $term; } ! empty( $sorted_terms ) AND sort( $sorted_terms ); return $sorted_terms; }