Как создать и отобразить иерархическое древовидное выпадающее меню рубрик на WordPress?

Здравствуйте! 

Помогите, пожалуйста, решить проблему: мне нужно создать выпадающий иерархический список рубрик в сайдбаре (виджетах) на сайте на WordPress. У меня много рубрик, поэтому ручной способ не подходит. Количество записей в каждой рубрике не имеет значения. Я перепробовал множество плагинов, но ни один не подошел. Буду признателен за решение на PHP, так как планирую вставить этот код в виджет PHP-код.
  • 11 октября 2024 г. 14:06
Ответы на вопрос 2
Здравствуйте!

Чтобы создать иерархическое древовидное выпадающее меню рубрик на WordPress в виджете, вы можете использовать следующий код на PHP. Этот код можно вставить в ваш PHP-виджет или в файл вашей темы (например, в `functions.php` или в файл шаблона).

Вот код для отображения иерархического списка рубрик:

```php
<?php
function custom_category_menu() {
    $args = array(
        'taxonomy'   => 'category', // Замените 'category', если используете другую таксономию
        'orderby'    => 'name',
        'order'      => 'ASC',
        'hide_empty' => true,
    );

    $categories = get_categories($args);

    if (!empty($categories)) {
        echo '<ul class="custom-category-menu">';
        foreach ($categories as $category) {
            if ($category->parent == 0) {
                // Выводим родительскую категорию
                echo '<li>' . '<a href="' . get_category_link($category->term_id) . '">' . $category->name . '</a>';

                // Проверяем, есть ли дочерние категории
                $children = get_categories(array('child_of' => $category->term_id, 'hide_empty' => true));
                if ($children) {
                    echo '<ul>';
                    foreach ($children as $child) {
                        echo '<li><a href="' . get_category_link($child->term_id) . '">' . $child->name . '</a></li>';
                    }
                    echo '</ul>';
                }
                echo '</li>';
            }
        }
        echo '</ul>';
    } else {
        echo 'Нет рубрик для отображения.';
    }
}

// Используйте эту функцию в вашем виджете PHP-кода:
custom_category_menu();
?>
```

### Пошаговые действия

1. **Добавьте код**: Вставьте приведенный выше код в ваш виджет PHP-кода, или добавьте его в файл `functions.php` вашей темы.
   
2. **Используйте функцию**: Внутри виджета или в любом месте шаблона, где требуется отобразить меню, вызовите функцию `custom_category_menu()`.

3. **Стилизация**: Вы можете стилизовать ваше меню, добавив CSS к классам `.custom-category-menu` и `li` в вашем файле стилей.

### Примечания

- Вы можете заменить `'category'` на вашу собственную таксономию, если это необходимо.
- Убедитесь, что в вашей установке WordPress включены рубрики, и у вас есть рубрики, которые можно отображать.

Этот код создаст иерархическое меню рубрик, где будут отображаться родительские рубрики, и все дочерние будут вложены в соответствующие родительские.
Обновил <br/> <pre><code class="php">&lt;select name="category" id="category-select"&gt;
    &lt;option value=""&gt;Выберите из списка&lt;/option&gt;
    &lt;?php
    $categories = get_terms(array(
        'taxonomy'   =&gt; 'category',
        'hide_empty' =&gt; false,
        'orderby'    =&gt; 'term_order', 
        'order'      =&gt; 'ASC',
    ));

   
    function display_category_options($categories, $parent = 0, $depth = 0) {
        foreach ($categories as $category) {
            if ($category-&gt;parent == $parent) {
                $indent = str_repeat('&amp;nbsp;', $depth * 4); 
                echo '&lt;option value="' . esc_url(get_category_link($category-&gt;term_id)) . '"&gt;' . $indent . esc_html($category-&gt;name) . '&lt;/option&gt;';
                display_category_options($categories, $category-&gt;term_id, $depth + 1); 
            }
        }
    }

    display_category_options($categories);
    ?&gt;
&lt;/select&gt;

&lt;script&gt;
document.getElementById('category-select').addEventListener('change', function() {
    const selectedValue = this.value;
    if (selectedValue) {
        window.location.href = selectedValue; 
    }
});
&lt;/script&gt;</code></pre>
Похожие вопросы