[РЕШЕНО] Сортировка 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'...