ID родительской страницы верхнего уровня: расширяем функцию body_class

ID родительской страницы верхнего уровняНаткнулся на один интересный пример, показывающий как можно расширить функцию body_class() (см. описание).

body_class была введена в версии 2.7 и очень удобна для стилизации определенных постов, страниц, дочерних страниц и т.д. Один из минусов стилизации дочерних страниц — это, если мы посмотрим на дочернюю страницу 3, 4, 5 ... уровней, то мы увидим, что добавляется класс описывающий рядом стоящую родительскую страницу, а не родительской страницы верхнего уровня. Но что делать, если нам нужно опираться именно на родительскую страницу верхнего уровня и если текущая страница — дочерняя к ней (неважно какой уровень), то указывать ей особые стили.

Аналогичной проверкой можно выводить, допустим, какой-то блок в сайдбаре только для страниц одной "ветки" — для родительской страницы и для всех её предков любого уровня.

Для просто реализации такой задачи существует встроенная функция WordPress — get_post_ancestors(). C её помощью мы можем получить ID родительской страницы верхнего уровня.

Давайте посмотрим пример, показывающий как к стандартным классам body_class() добавить свой класс top-level-parent-pageid-123. Код как обычно вставляется в файл шаблона functions.php:

add_filter('body_class','top_level_parent_id_body_class');
function top_level_parent_id_body_class($classes) {
	global $wpdb, $post;
	if (is_page()) {
	    if ($post->post_parent)	{
        	$ancestors=get_post_ancestors($post->ID);
        	$root=count($ancestors)-1;
        	$parent = $ancestors[$root];
        } else {
        	$parent = $post->ID;
        }
        $classes[] = 'top-level-parent-pageid-' . $parent;
	}
	return $classes;
}

После того как мы вставим этот код в functions.php, функция body_class(), кроме прочих, будет выводить класс "top-level-parent-pageid-123", где 123 — ID родительской страницы верхнего уровня.

Теги:
Рубрика: Разное | 05 июля 2011

Предыдущие записи из рубрики `Разное`

Один комментарий

Kolass, 24.02.2015 в 19:02

Нужно было узнать ID родительской страницы, относительно той, на которой находишься. Помог кусок Вашего кода:
if ($post->post_parent) {
$ancestors=get_post_ancestors($post->ID);
$root=count($ancestors)-1;
$parent = $ancestors[$root];
} else {
$parent = $post->ID;
}
Спасибо!

ОтветитьОтветить

Комментировать