Класс Walker в WordPress: описание, методы и пример использования

## Класс 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 .= "$indent
    n"; } 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.

    Leave a Reply

    Ваш адрес email не будет опубликован. Обязательные поля помечены *