Вопрос или проблема
Я использую этот код для получения категорий и подкатегорий с референсной страницы. Это довольно удобно, так как позволяет сортировать их иерархически. Но я хотел бы назначить им два разных стиля (один для категорий и один для подкатегорий). Как я могу это сделать?
<ul class="chip-list">
<?php $categories = wp_get_post_terms( get_the_id(), 'portfolio_category', array( 'orderby' => 'term_order'));
if( $categories ): ?>
<?php foreach( $categories as $category ): ?>
<li>
<a class="chip chip__portfolio--category" href="<?php echo esc_url( get_category_link( $category->term_id ) ); ?>">
<?php echo $category->name; ?>
</a>
</li>
<?php endforeach; ?>
<?php endif; ?>
</ul>
Вы должны изменить свой код, чтобы установить разные стили для родительских и дочерних категорий. Вот обновленный подход для вас.
<ul class="chip-list">
<?php
$categories = wp_get_post_terms( get_the_ID(), 'portfolio_category', array( 'orderby' => 'term_order' ) );
if ( $categories ): ?>
<?php foreach ($categories as $category): ?>
<li>
<?php if ( $category->parent == 0 ): // Родительская категория ?>
<a class="chip chip__portfolio--category" href="<?php echo esc_url(get_category_link($category->term_id)); ?>">
<?php echo $category->name; ?>
</a>
<?php else: // Подкатегория ?>
<a class="chip chip__portfolio--subcategory" href="<?php echo esc_url(get_category_link($category->term_id)); ?>">
<?php echo $category->name; ?>
</a>
<?php endif; ?>
</li>
<?php endforeach; ?>
<?php endif; ?>
</ul>
Ответ или решение
Чтобы получить категории и подкатегории отдельно и применить к ним разные стили, вы можете внести определенные изменения в ваш текущий код. Этот подход позволяет выделять родительские категории и подкатегории, используя разные классы CSS для стилизации.
Вот обновленный код, который позволит вам это реализовать:
<ul class="chip-list">
<?php
// Получаем категории
$categories = wp_get_post_terms(get_the_ID(), 'portfolio_category', array('orderby' => 'term_order'));
if ($categories): ?>
<?php foreach ($categories as $category): ?>
<li>
<?php if ($category->parent == 0): // Если это родительская категория ?>
<a class="chip chip__portfolio--category" href="<?php echo esc_url(get_category_link($category->term_id)); ?>">
<?php echo esc_html($category->name); ?>
</a>
<?php else: // Если это подкатегория ?>
<a class="chip chip__portfolio--subcategory" href="<?php echo esc_url(get_category_link($category->term_id)); ?>">
<?php echo esc_html($category->name); ?>
</a>
<?php endif; ?>
</li>
<?php endforeach; ?>
<?php endif; ?>
</ul>
Объяснение кода:
-
Получение категорий: Используя функцию
wp_get_post_terms()
, мы получаем все категории для текущего поста, сортируя их по порядку. -
Цикл по категориям: Мы проходим по всем категориям с помощью цикла
foreach
. -
Проверка на родительскую категорию:
- С помощью условия
if ($category->parent == 0)
проверяем, является ли категория родительской. Если это так, применяем классchip__portfolio--category
. - В противном случае, если категория является подкатегорией, используем класс
chip__portfolio--subcategory
.
- С помощью условия
-
Экранирование вывода: Функция
esc_html()
используется для безопасного вывода имени категории, что предотвращает возможные XSS-атаки.
Заключение:
Теперь у вас есть код, который позволяет вам разделить категории и подкатегории с соответствующим их стилизованием. Вы можете добавить CSS-правила для классов chip__portfolio--category
и chip__portfolio--subcategory
в ваш файл стилей, чтобы настроить внешний вид для каждой группы категорий по вашему вкусу. Это позволит улучшить визуальное восприятие и организацию контента на вашем сайте.