Вопрос или проблема
Мне нужно, чтобы идентификатор верхнего родительского страницы был добавлен в класс тела страниц.
Главная страница (ид: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;
}
Пояснение кода
-
Хук
add_filter
: Данный хук активирует функциюdc_parent_body_class
, которая будет добавлять наш класс к body. -
Функция
dc_parent_body_class($classes)
: Эта функция принимает текущие классы body, которые были назначены WordPress, и добавляет к ним новый. -
Проверка на страницу:
is_page()
— условие, проверяющее, находимся ли мы на странице. Важно это сделать, чтобы добавлять классы только для страниц. -
Получение предков: Мы используем
get_post_ancestors(get_the_ID())
, чтобы получить массив ID всех предков текущей страницы. -
Получение ID верхнего предка: Если массив предков не пуст, мы используем функцию
end($parents)
, чтобы получить ID верхнего родителя. Этот ID будет добавлен к классам. Если предков нет, будет использован ID самой страницы. -
Добавление класса: Класс
top-parent-{id}
добавляется к массиву$classes
. -
Возврат классов: После всех манипуляций массив классов возвращается для дальнейшего использования WordPress.
В заключение
Используя вышеописанный код, вы сможете добавить ID верхнего родителя в классы body вашей темы WordPress. Это сможет значительно упростить стилизацию и управление отображением контента на основе иерархической структуры страниц.
Это решение адаптируется под ваши нужды и улучшает организации работы с классами в body. Добавление верхнего родительского ID может повысить качество пользовательского интерфейса и улучшить взаимодействие с вашим сайтом.