WordPress отображает только дочернюю категорию в шаблоне

Вопрос или проблема

У меня есть блог с 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>';
    }
}
?>

Объяснение кода

  1. Указание родительской категории: Замените 123 на ID вашей родительской категории. Это позволяет коду знать, какие категории считать дочерними.

  2. Цикл через категории: Мы перебираем все категории, присвоенные статье.

  3. Проверка дочерней категории: Внутри цикла мы проверяем, является ли parent текущей категории равным ID родительской категории. Если да, то мы выводим эту категорию.

  4. Экранирование значений: Используем функции esc_attr(), esc_url() и esc_html(), чтобы гарантировать безопасность выводимых данных и предотвратить уязвимости, такие как XSS.

Заключение

Теперь, когда этот код будет добавлен в ваш шаблон, он будет выводить только дочерние категории статей, исключая родительскую категорию. Это решение не только эффективно, но и безопасно, благодаря использованию правильных функций для экранирования вывода.

Убедитесь, что вы тестируете код на своем сайте, чтобы убедиться в его корректной работе в контексте вашего проекта.

Оцените материал
Добавить комментарий

Капча загружается...