## Класс Walker в WordPress
### Описание
Класс **Walker** предназначен для отображения различных древовидных структур. Вы можете расширить этот класс, создавая дочерние классы для конкретных целей. Дочерние классы не обязаны реализовывать все абстрактные методы; достаточно реализовать только те, которые необходимы.
### Используется в
- **Walker_Nav_Menu()** — для создания меню.
### Методы класса
Вот основные методы, которые предоставляет класс **Walker**:
1. **display_element** - Отображает элемент дерева.
2. **end_el** - Завершает вывод элемента.
3. **end_lvl** - Завершает уровень дерева.
4. **get_number_of_root_elements** - Возвращает количество корневых элементов.
5. **paged_walk** - Проходит по элементам с поддержкой постраничного отображения.
6. **start_el** - Начинает вывод элемента.
7. **start_lvl** - Начинает новый уровень.
8. **unset_children** - Удаляет всех детей для данного элемента.
9. **walk** - Проходит по элементам для создания их иерархического отображения.
### Пример использования
Давайте создадим свой собственный обработчик для отображения флажков (checkbox) для категорий.
```php
class Walker_My_Checklist extends Walker {
public $tree_type = 'term';
public $db_fields = array('parent' => 'parent', 'id' => 'term_id');
public function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("t", $depth);
$output .= "$indentn";
}
public function end_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("t", $depth);
$output .= "$indent
n";
}
public function start_el( &$output, $term, $depth = 0, $args = array(), $current_object_id = 0 ) {
$taxonomy = $args['taxonomy'];
$name = "tax_input[$taxonomy]";
$class = 'class="category-li"';
$args['selected_cats'] = array_map('intval', $args['selected_cats'] ?? []);
$is_selected = in_array($term->term_id, $args['selected_cats'], true);
$is_disabled = !empty($args['disabled']);
$str = '
';
$output .= strtr($str, [
'{id}' => "{$taxonomy}-{$term->term_id}",
'{class}' => $class,
'{term_id}' => $term->term_id,
'{input_name}' => "{$name}[]",
'{input_id}' => "in-$taxonomy-$term->term_id",
'{checked}' => checked($is_selected, true, false),
'{disabled}' => disabled($is_disabled, true, false),
'{name}' => esc_html($term->name),
]);
}
public function end_el( &$output, $data_object, $depth = 0, $args = array() ) {
$output .= " n";
}
}
Теперь используем этот класс:
$taxonomy = 'category';
$terms = get_terms(['taxonomy' => $taxonomy]);
$walker = new Walker_My_Checklist;
$output = $walker->walk($terms, 0, ['taxonomy' => $taxonomy]);
echo htmlspecialchars($output);
Результат
Используя указанный класс, вы получите следующий HTML-код:
-
-
Примечания
- Этот класс рекомендуется использовать в версии WordPress с 2.1.0 и выше.
История изменений
- Класс был введен в версии 2.1.0.