[РЕШЕНО] Сортировка wp_list_categories по term_meta
пользуюсь для статистики
вывожу таксономию wp_list_categories()
у каждой таксономии есть term_meta (так называемый родитель)
как вывести таксономии отсортированные по term_meta ?
пример сейчас:
таксономия волк - Ну погоди
таксономия гомер симпсон - Симпсоны
таксономия заяц - Ну погоди
таксономия мардж симпсон - Симпсоны
нужно:
term_meta Ну погоди - волк
term_meta Ну погоди - заяц
term_meta Симпсоны - гомер симпсон
term_meta Симпсоны - мардж симпсон
Ответ
(источник https://wordpress.stackexchange.com/questions/246975/order-get-terms-by-term-meta)
Недостаток в том, что сортировка учитывает только значение мета поля, а имя таксономии при сортировку не учитывает.
// 1 вариант - отсортирует по значению в метаполе, таксономии с пустыми метополями, // будут игнорированы и не показаны в списке $args = array( 'taxonomy' => 'categoria-de-productos', 'orderby' => 'meta_value', 'order' => 'ASC', 'hide_empty' => false, 'hierarchical' => false, 'parent' => 0, 'meta_query' => [[ 'key' => 'wm-cat-prod-order' // сюда название произвольного поля таксономии // 'type' => 'NUMERIC', ]], ); $terms = get_terms( $args ); foreach ($terms as $term){ echo $tax_id = $term->term_id; // ... и так далее и что нужно )) } // 2 вариант - самая примитивная конструкция - полный аналог номера 1 $args = array( 'taxonomy' => 'categoria-de-productos', 'meta_key' => 'wm-cat-prod-order', 'orderby' => 'meta_value', // use 'meta_value_num' if the value type of this meta is numeric. 'order' => 'ASC', ); $terms = get_terms( $args ); // 3 вариант - сортировка по значению метаполя, показаны будут таксономии как // и с пустыми метополями так и с заполнеными. Таксономии с пустыми метополями показаны // будут на первом плане $args = array( 'taxonomy' => 'categoria-de-productos', 'orderby' => 'meta_value', // meta_value_num 'order' => 'ASC', // DESC 'hide_empty' => false , 'hierarchical' => false, 'parent' => 0, 'meta_query' => [[ 'relation' => 'OR', array( 'key'=>'wm-cat-prod-order', 'compare' => 'NOT EXISTS' ), array( 'key'=>'wm-cat-prod-order', 'compare' => 'EXISTS' ) // 'type' => 'NUMERIC', ]], ); $terms = get_terms( $args );
это уже дело вкуса ))
пересортировывать всеравно придется в массиве или в цикле, эти номер являются ID таксономий , а у таксономий свои имена title
В интернете встречал функии сортировки массивов, наверно сюда и применю, собиру в цикле массив а потом PHP функцией отсортирую
У тебя в метаполе числа указывается вроде. Почему тогда
'orderby' => 'meta_value_num'
не используешь? Он же числа как строки сортировать будет с'orderby' => 'meta_value'
...