Конфликт между функцией поиска и глобальным объектом $ post при попытке добавить фильтр для добавления класса в теле в WordPress - PullRequest
0 голосов
/ 04 июня 2019

Вот моя проблема.

Я хочу добавить класс к тегу body сообщения или страницы, если сообщение / страница является дочерним по отношению к другому сообщению.

Пока все хорошо:

function add_class_to_custom_post_parent($classes) {

    global $post;
    if ($post->post_parent > 0) {
        $classes[] = 'children-custom-post-page';
    }
    return $classes;
}
add_filter( 'body_class', 'add_class_to_custom_post_parent' );

И это работает как талисман, но когда я использую функцию поиска в WordPress (когда я пытаюсь вернуть всю запись или базу данных по слову), система все еще работает, но выдает эту ошибку:

Примечание: Попытка получить свойство необъекта в functions.php в строке 301

Чтобы отладить его, я попробовал другое решение:

Я обернул код в условный if (is_page()) {}, но тогда код не будет работать в посте (и я не думаю, что это правильное решение), и я попытался var_dump() глобальный $post объект, но по какой-то причине на этой странице он ничего не вернет.

Так что теперь я пытаюсь заподозрить, что что-то не так.

Дело в том, что я использую простую тему, поэтому без добавления или дополнительного плагина, это ванильная версия WordPress, и я написал все функции.

Есть ли что-то, чего мне не хватает?

1 Ответ

1 голос
/ 04 июня 2019

Вы можете использовать функцию is_singular () , чтобы добавить свой класс CSS в тег body только для сообщений и страниц (и даже для пользовательских типов сообщений, если вы их указали):

function add_class_to_custom_post_parent($classes) {

    if ( is_singular(array('post', 'page')) ) {
        global $post;

        if ($post->post_parent > 0) {
            $classes[] = 'children-custom-post-page';
        }
    }

    return $classes;

}
add_filter( 'body_class', 'add_class_to_custom_post_parent' );

О, и причина, по которой вы получаете такое уведомление PHP, заключается в том, что $post не установлен, когда вы выполняете поиск: вы не видите ни пост, ни страницу, выувидеть шаблон результатов поиска, который не устанавливает для себя объект $post.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...