Как в get_terms вывести сортировку в шаблоне
Подскажите пожалуйста еще по одному вопросу. Есть код вывода таксономии:
$ags = array(
'taxonomy' => 'label',
'parent' => '146',
);
$terms = get_terms($ags);
foreach($terms as $term){
$zagolovok_glav = $term->name;
echo $zagolovok_glav;
}
А как вывести сортировку по $zagolovok_glav? Чтобы получилось вот так:
<select name="sorting" class="sorting_select">
<option value="ASC">С начала алфавита</option>
<option value="DESC">С конца алфавита</option>
</select>
Это возможно в get_terms?
Ответы (1 шт):
Автор решения: humster_spb
→ Ссылка
По идее get_terms() по умолчанию выводит данные в алфавитном порядке, но можно для верности добавить в $ags 'order' => 'ASC'. А на стороне клиента при изменении значения select переворачивать список:
let titles = ['Апельсины','Бананы','Груши','Дыни','Яблоки'];
let wrap = document.getElementById('wrapper');
titles.forEach((title) => wrap.innerHTML += `<span>${title}</span>`);
let sort = document.getElementById('sort');
sort.onchange = function() {
wrap.classList.toggle('reverse');
}
#wrapper {
display: flex;
flex-direction: column;
}
#wrapper.reverse {
flex-direction: column-reverse;
}
<select name="sorting" class="sorting_select" id="sort">
<option value="ASC">С начала алфавита</option>
<option value="DESC">С конца алфавита</option>
</select>
<div id="wrapper">
<!-- Здесь должен выполняться Ваш php-код, я просто сымитировал вывод данных с помощью js. Обратите внимание, что $zagolovok_glav при выводе нужно обернуть в какой-нибудь элемент - span или div: у Вас сейчас просто echo $zagolovok_glav, а нужно echo '<span>'.$zagolovok_glav.'</span>'
-->
</div>
UPD
Вот вариант с настоящей сортировкой, а не просто переворачиванием списка. Для простоты я элементы вписал в html - будем считать, что они уже пришли к нам на фронт в таком виде благодаря get_terms():
let wrap = document.getElementById('wrapper');
let sort = document.getElementById('sort');
let elems = document.querySelectorAll('#wrapper span');
let titles = [];
elems.forEach((el) => titles.push(el.outerText));
sort.onchange = function() {
if(sort.value == 'ASC') {
titles.sort();
}
else if(sort.value == 'DESC') {
titles.sort().reverse();
}
else {
titles = [];
elems.forEach((el) => titles.push(el.outerText));
}
wrap.innerHTML = '';
titles.forEach((title) => wrap.innerHTML += `<span>${title}</span>`);
}
#wrapper {
display: flex;
flex-direction: column;
}
<select name="sorting" class="sorting_select" id="sort">
<option>По умолчанию</option>
<option value="ASC">С начала алфавита</option>
<option value="DESC">С конца алфавита</option>
</select>
<div id="wrapper">
<span>Бананы</span>
<span>Апельсины</span>
<span>Яблоки</span>
<span>Дыни</span>
<span>Груши</span>
</div>