WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Дерево элементов таксономии (терминов) в виде чекбоков

Как реализовать цикл таксономии

Категория
  Подкатегория
	Подкатегория
	  Подкатегория
		и т.д.

В админки они так расположены

Функция wp_list_categories() не подходит, она выводит только список, а мне надо чтобы вывод был чекбоксами.

0
Ильяс Фаизов
4 месяца назад
  • 1

    Костыльный вариант: в функции 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;
    }

    То у меня вывод такой:

    В админке такой:

    Ильяс Фаизов 3 мес назад

    Спасибо большое, все отлично работает, очень выручили!

    Комментировать
  • 0
    Artur Khylskyi cайт: allsteeply.com

    При регистрации таксономии смените параметр на true:

    'hierarchical'          => false 
    Ильяс Фаизов 4 мес назад

    Это я знаю, как реализовать вывод? функция wp_list_categories не подходит, она выводит только список, а мне надо чтобы вывод был чекбоксами

    Artur Khylskyi 4 мес назад

    Готовой функции нет. Нужно писать свою.

    Ильяс Фаизов 4 мес назад

    Мне бы понять логику, как это реализовать

    Комментировать
  • 1

    Если правильно понял задачу, то есть готовая: wp_category_checklist() или её родитель wp_terms_checklist().

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