Дерево элементов таксономии (терминов) в виде чекбоков
Как реализовать цикл таксономии
Категория Подкатегория Подкатегория Подкатегория и т.д.
В админки они так расположены
Функция wp_list_categories() не подходит, она выводит только список, а мне надо чтобы вывод был чекбоксами.
Костыльный вариант: в функции wp_list_categories есть фильтр wp_list_categories, с его помощью можно делать изменения в html перед выводом его на экран. Это если с программированием не очень.
Правильный вариант: написать свой Walker под это дело.
Помогу так: набросаю рекурсивную функцию вывода элементов таксономии.
$args = array( 'hide_empty' => 0 ); // Получаем все категории $terms = get_terms('category', $args); $childs = array(); // Строим массив, где ключ - это родительская категория, а значение - массив категорий этого родителя foreach ($terms as $term) { $childs[$term->parent][] = $term; } // Получаем html меню $menu = get_menu($childs); // Выводим меню echo $menu; // Внешняя обертка меню function get_menu($childs) { $out = '<div class="menu">'; $out .= get_tree($childs[0], $childs); $out .= '</div>'; return $out; } // Рекурсивная функция получения элемента меню function get_tree(&$terms, &$childs) { $out = ''; foreach ($terms as $term) { $out .= '<div class="menu-item">'; $out .= '<div class="checkbox"><input type="checkbox" name="term_' . $term->term_id . '" value="' . $term->term_id . '" /> ' . $term->name . '</div>'; if (isset($childs[$term->term_id])) { $out .= '<div class="menu-item-sub">'; $out .= get_tree($childs[$term->term_id], $childs); $out .= '</div>'; } $out .= '</div>'; } return $out; }Если прописать стиль
.menu-item-sub { margin: 0 0 0 30px; }То у меня вывод такой:
В админке такой:
Спасибо большое, все отлично работает, очень выручили!
При регистрации таксономии смените параметр на true:
Это я знаю, как реализовать вывод? функция wp_list_categories не подходит, она выводит только список, а мне надо чтобы вывод был чекбоксами
Готовой функции нет. Нужно писать свою.
Мне бы понять логику, как это реализовать
Если правильно понял задачу, то есть готовая: wp_category_checklist() или её родитель wp_terms_checklist().