Добавить ID верхней родительской страницы в класс тела

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

Мне нужно, чтобы идентификатор верхнего родительского страницы был добавлен в класс тела страниц.

Главная страница (ид:10)
– Подстраница (ид:11)
— Подстраница деталей (ид:12)

По умолчанию это выглядит так: Подстраница получает идентификатор родителя 10 в классе тела. А Подстраница деталей получает идентификатор родителя 11 в классе тела.

Что мне нужно, так это чтобы Подстраница деталей получила идентификатор верхнего родителя, добавленный в класс тела, так чтобы идентификатор 10 был добавлен в тело.

Единственное, что я могу найти, это то, что оно по умолчанию. Как я могу это сделать?

нашел это:

add_filter( 'body_class', 'dc_parent_body_class' );
    function dc_parent_body_class( $classes ) {
        if( is_page() ) { 
            $parents = get_post_ancestors( get_the_ID() );
            $id = ($parents) ? $parents[count($parents)-1]: get_the_ID();
        if ($id) {
            $classes[] = 'top-parent-' . $id;
        } else {
            $classes[] = 'top-parent-' . get_the_ID();
        }
    }

    return $classes;
}

Ответ или решение

Вопрос: Как добавить ID верхнего родительского элемента в класс body для страниц WordPress?

В данной статье мы разберем, как добавить ID верхнего родителя (top parent) страницы в класс body в WordPress. Эта функциональность может быть полезна, если у вас есть иерархия страниц и вы хотите иметь возможность стилизовать элементы на основе верхнего родительского элемента.

Решение

Для достижения этой цели мы воспользуемся хуком body_class. Хук позволяет изменять классы, которые добавляются к тегу body у страницы. Ниже приведен код, который вы можете применить в файле functions.php вашей темы.

add_filter('body_class', 'dc_parent_body_class');

function dc_parent_body_class($classes) {
    if (is_page()) { 
        // Получаем предков текущей страницы
        $parents = get_post_ancestors(get_the_ID());

        if ($parents) {
            // Если есть предки, получаем ID верхнего предка
            $top_parent_id = end($parents);
        } else {
            // Если нет предков, используем ID текущей страницы
            $top_parent_id = get_the_ID();
        }

        // Добавляем класс top-parent с верхним ID родителя
        $classes[] = 'top-parent-' . $top_parent_id;
    }

    return $classes;
}

Пояснение кода

  1. Хук add_filter: Данный хук активирует функцию dc_parent_body_class, которая будет добавлять наш класс к body.

  2. Функция dc_parent_body_class($classes): Эта функция принимает текущие классы body, которые были назначены WordPress, и добавляет к ним новый.

  3. Проверка на страницу: is_page() — условие, проверяющее, находимся ли мы на странице. Важно это сделать, чтобы добавлять классы только для страниц.

  4. Получение предков: Мы используем get_post_ancestors(get_the_ID()), чтобы получить массив ID всех предков текущей страницы.

  5. Получение ID верхнего предка: Если массив предков не пуст, мы используем функцию end($parents), чтобы получить ID верхнего родителя. Этот ID будет добавлен к классам. Если предков нет, будет использован ID самой страницы.

  6. Добавление класса: Класс top-parent-{id} добавляется к массиву $classes.

  7. Возврат классов: После всех манипуляций массив классов возвращается для дальнейшего использования WordPress.

В заключение

Используя вышеописанный код, вы сможете добавить ID верхнего родителя в классы body вашей темы WordPress. Это сможет значительно упростить стилизацию и управление отображением контента на основе иерархической структуры страниц.

Это решение адаптируется под ваши нужды и улучшает организации работы с классами в body. Добавление верхнего родительского ID может повысить качество пользовательского интерфейса и улучшить взаимодействие с вашим сайтом.

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

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