Вопрос или проблема
У меня есть блог с 1 родительской категорией и 3 дочерними подкатегориями.
По техническим причинам в административной панели, когда я пишу статью, я должен отмечать как родительскую, так и дочернюю категорию.
В каждой статье я хочу отображать название её “непосредственной” категории, а не родительской.
Вот что я делаю в своём шаблоне :
В моём шаблоне я отображаю категорию статьи так (мне нужен слаг в классе ссылки !) :
foreach( (get_the_category()) as $category ) {
echo '<a class="tag-cat ' . $category->slug . '" href="' . get_category_link($category->cat_ID) . '">' . $category->cat_name . '</a>';
}
Итак, есть ли способ отображать только непосредственную (дочернюю) категорию? И не родительскую?
Если вы знаете название родительской категории, то вы могли бы просто сделать условие внутри цикла foreach
Демокод
<?php
foreach((get_the_category()) as $category) {
if($category->cat_name!="название родительской категории") {
echo '<a class="tag-cat ' . $category->slug . '" href="' . get_category_link($category->cat_ID) . '">' . $category->cat_name . '</a>';
}
} ?>
?>
.
Ответ или решение
Для решения вашей задачи в шаблоне WordPress, где требуется отображать только дочернюю категорию статьи и исключать родительскую, нужно немного доработать ваш код. Давайте рассмотрим, как это сделать наиболее эффективно и чисто с точки зрения кода.
Задача
У вас есть блог, состоящий из одной родительской категории и трех дочерних. При написании статьи вы выбираете как родительскую, так и дочерние категории, но на сайте нужно отображать только название выбранной дочерней категории.
Решение
Сначала мы должны убедиться, что у нас есть доступ к необходимой информации о категориях. WordPress позволяет получить все категории, присвоенные записи, с помощью функции get_the_category()
, как вы уже сделали.
Мы можем использовать цикл foreach
, чтобы пройти через все категории, но нам нужно дополнительно проверить, является ли каждая категория дочерней по отношению к родительской и, следовательно, исключить родительскую категорию из вывода.
Вот доработанный код:
<?php
// Указываем ID родительской категории
$parent_category_id = 123; // Замените на соответствующий ID родителя
foreach(get_the_category() as $category) {
// Проверяем, является ли категория дочерней
if ($category->parent === $parent_category_id) {
echo '<a class="tag-cat ' . esc_attr($category->slug) . '" href="' . esc_url(get_category_link($category->cat_ID)) . '">' . esc_html($category->cat_name) . '</a>';
}
}
?>
Объяснение кода
-
Указание родительской категории: Замените
123
на ID вашей родительской категории. Это позволяет коду знать, какие категории считать дочерними. -
Цикл через категории: Мы перебираем все категории, присвоенные статье.
-
Проверка дочерней категории: Внутри цикла мы проверяем, является ли
parent
текущей категории равным ID родительской категории. Если да, то мы выводим эту категорию. -
Экранирование значений: Используем функции
esc_attr()
,esc_url()
иesc_html()
, чтобы гарантировать безопасность выводимых данных и предотвратить уязвимости, такие как XSS.
Заключение
Теперь, когда этот код будет добавлен в ваш шаблон, он будет выводить только дочерние категории статей, исключая родительскую категорию. Это решение не только эффективно, но и безопасно, благодаря использованию правильных функций для экранирования вывода.
Убедитесь, что вы тестируете код на своем сайте, чтобы убедиться в его корректной работе в контексте вашего проекта.