Как определить, содержит ли пост контент виджета?

6 апр. 2011 г., 19:02:19
Просмотры: 605
Голосов: 2

У меня есть зарегистрированная область виджетов под названием "my-header", которая влияет на абсолютное позиционирование элементов ниже неё в разметке.

Мне нужно выполнить запрос в header.php, чтобы определить, присутствует ли сайдбар для текущего поста, и вывести CSS-класс в тег body моей темы. Этот класс я буду использовать для корректировки абсолютного позиционирования элементов.

Существует ли метод, который можно вызвать отдельно от метода отображения сайдбара, чтобы определить, есть ли у поста контент виджета для "my-sidebar"? Например, функция, которая просто возвращает true/false?

После изучения widgets.php я попробовал использовать is_active_sidebar('my-header'), но она возвращает true для всех страниц. Мне нужна функция, которая принимает пост в качестве аргумента. Если такой функции нет, возможно, мне придётся создать свою собственную.

3
Комментарии

Возможно, вам стоит взглянуть на плагин My Snippets от Джастина Тадлока, http://wordpress.org/extend/plugins/my-snippets/

Manzabar Manzabar
6 апр. 2011 г. 19:33:05

@Manzabar: выглядит интересно. Уже давно хотел добавить это в свою тему. Спасибо за ссылку.

Scott B Scott B
6 апр. 2011 г. 19:38:48

Не могли бы вы объяснить эту часть - если запись имеет содержимое виджета для виджета "my-sidebar". Записи и виджеты - совершенно разные вещи, они не пересекаются, если только вы не используете какой-то пользовательский контекстно-зависимый виджет.

Rarst Rarst
31 мая 2011 г. 02:03:27
Все ответы на вопрос 1
0
<?php
$bodyclass = "";
// находимся на странице 'single'? например, запись, страница или другой тип записи?
if(is_single()){
    // это запись типа 'page'? или это запись блога?
    global $post;
    if($post->post_type == 'page'){
        // теперь можно проверить, есть ли активный контент в сайдбаре
        if( is_active_sidebar('my-header')){
            $bodyclass="wehavesidebarcontentyay";
        }
    }
}

?>
<body <?php body_class($bodyclass); ?>>

Хотя я уверен, что если у вас есть body_class в теге body, то у вас уже есть необходимые css-классы и селекторы для этого без PHP-кода.

9 авг. 2011 г. 14:17:32