Как составить список родительских категорий и их подкатегорий?

Здравствуйте! <br/> Я использую следующий код для вывода списка подкатегорий определенной категории: <br/> <pre><code class="php">$args = array(
'orderby'            =&gt; 'name',
'title_li'            =&gt; '',
'order'              =&gt; 'asc',
'style'              =&gt; 'list',
'hide_empty'         =&gt; 0,
'use_desc_for_title' =&gt; 1,
'child_of'       =&gt; 4
);
echo '&lt;ul class="subcat align-center"&gt;' ;  
wp_list_categories($args);
echo '&lt;/ul&gt;';</code></pre> <br/> Можете подсказать, как добавить родительскую категорию в начало списка подкатегорий? Также важно, чтобы родительская категория была активной при нахождении в ней, то есть к ней добавлялся класс <b>current-cat</b>?
  • 24 сентября 2024 г. 0:43
Ответы на вопрос 2
Чтобы добавить родительскую категорию в начало списка подкатегорий с использованием функции `wp_list_categories` в WordPress, вам потребуется немного изменить ваш код. 

Вам нужно сначала получить информацию о родительской категории, а затем вывести её перед списком подкатегорий. Чтобы активировать класс `current-cat` для родительской категории, вы можете использовать дополнительную логику.

Вот пример кода, который делает это:

```php
<?php
$parent_cat_id = 4; // Замените на ID вашей родительской категории

// Получаем информацию о родительской категории
$parent_cat = get_category($parent_cat_id);

// Проверяем, что родительская категория существует
if ($parent_cat) {
    // Определяем, активна ли родительская категория
    $is_active = (is_category($parent_cat_id)) ? 'current-cat' : '';
    
    // Выводим родительскую категорию
    echo '<ul class="subcat align-center">';
    echo '<li class="'.$is_active.'"><a href="'.get_category_link($parent_cat_id).'">'.$parent_cat->name.'</a></li>';
    
    // Параметры для вывода подкатегорий
    $args = array(
        'orderby'            => 'name',
        'order'              => 'asc',
        'style'              => 'list',
        'hide_empty'         => 0,
        'child_of'          => $parent_cat_id,
        'title_li'          => ''
    );
    
    // Выводим подкатегории
    wp_list_categories($args);
    echo '</ul>';
}
?>
```

### Объяснение:

1. **Получение родительской категории**: Используется функция `get_category($parent_cat_id)`, чтобы получить объект родительской категории по её ID.
   
2. **Проверка активности**: Переменная `$is_active` устанавливается в `current-cat`, если текущая страница принадлежит родительской категории.

3. **Вывод**: Сначала выводим родительскую категорию, а затем вызываем `wp_list_categories` для вывода подкатегорий. 

Теперь, когда вы посетите страницу в родительской категории, она будет выделена классом `current-cat`.
<?php
$parent_id = 4; // ID родительской категории

// Получаем родительскую категорию
$parent_category = get_category($parent_id);

// Получаем подкатегории
$args = array(
    'orderby'            => 'name',
    'order'              => 'asc',
    'style'              => 'list',
    'hide_empty'         => 0,
    'child_of'           => $parent_id,
    'title_li'           => '',
    'use_desc_for_title' => 1
);

// Проверяем, находимся ли мы в родительской категории или её подкатегории
$current_category = get_queried_object();
$current_class = '';

if ($current_category && $current_category->term_id == $parent_id) {
    $current_class = 'current-cat';
}

echo '<ul class="subcat align-center">';

// Выводим родительскую категорию
echo '<li class="cat-item cat-item-' . $parent_category->term_id . ' ' . $current_class . '">';
echo '<a href="' . get_category_link($parent_category->term_id) . '">' . $parent_category->name . '</a>';
echo '</li>';

// Выводим подкатегории
wp_list_categories($args);

echo '</ul>';
?>


$parent_id = 4; — идентификатор родительской категории, которую вы хотите вывести.

get_category() — функция для получения родительской категории.

wp_list_categories() — стандартная функция для вывода подкатегорий.

get_queried_object() — проверяем, находимся ли мы на странице родительской категории или её подкатегории.

current-cat — если пользователь находится в родительской категории, то добавляется класс current-cat.

Этот код выводит родительскую категорию первой, добавляет к ней класс current-cat, если пользователь находится на её странице, а затем выводит список подкатегорий.
Похожие вопросы