WordPress как на ладони
Шаблоны, плагины и темы для настоящих поклонников Elementor. От TemplateMonster.com wordpress jino

[РЕШЕНО] Сортировка 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 );
Заметки к вопросу:
Kama 9 дней назад

У тебя в метаполе числа указывается вроде. Почему тогда 'orderby' => 'meta_value_num' не используешь? Он же числа как строки сортировать будет с 'orderby' => 'meta_value'...

kolshix 9 дней назад

это уже дело вкуса ))
пересортировывать всеравно придется в массиве или в цикле, эти номер являются ID таксономий , а у таксономий свои имена title
В интернете встречал функии сортировки массивов, наверно сюда и применю, собиру в цикле массив а потом PHP функцией отсортирую

0
kolshix
431
16 дней назад

Нет ответов на этот вопрос.

    На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация