Intereting Posts
Как удалить некоторые параметры экрана и мета-ящики из добавления / редактирования типа сообщения? Есть ли плагин для получения формы уведомления об удалении DMCA в WordPress? Как удалить функцию? Перенаправление динамической 301 с использованием старого идентификатора, хранящегося в настраиваемом поле Экспорт csv и force скачать на странице шаблона Что я могу ожидать при переходе от размещенного (WordPress.com) блога к одному, размещенному на странице. Замена функциональности меню WordPress плагином Новые комментарии не отображаются Страница имеет родительский и $ post-> post_parent возвращает 0 Страница архива тегов не работает Локальная установка WordPress не обрезает изображения Служить WordPress в корневом пути Apache PHP header () дает уже отправленные заголовки Пользовательские персонализированные новостные ленты или Blog Post-Stream Результаты лимитного архивирования архива

Попытка получить свойство не-объекта при использовании $ post-> post_parent

У меня отладка установлена ​​в true и для отображения различных баннеров я использую условные теги, такие как:

<?php if ( is_page( 'about' ) || '2' == $post->post_parent ) { // the page is "About", or the parent of the page is "About" $bannerimg = 'about.jpg'; } elseif ( is_page( 'learning' ) || '56' == $post->post_parent ) { $bannerimg = 'teaching.jpg'; } elseif ( is_page( 'admissions' ) || '15' == $post->post_parent ) { $bannerimg = 'admissions.jpg'; } else { $bannerimg = 'home.jpg'; // just in case we are at an unclassified page, perhaps the home page } ?> 

Это приводит к ошибке, например:

 [24-Sep-2013 00:03:32] PHP Notice: Trying to get property of non-object in D:\Clients\project1\www.project1.dev\wp-content\themes\custom_v1\header.php on line 100 

Удаление $ post-> post_parent исправляет уведомление PHP. Может ли кто-нибудь сообщить мне, если что-то не так?

Расположение этого кода:

Я использую структуру кода, похожую на предыдущую, в моем файле header.php. Это не входит в какой-либо пост-цикл. Стоимость, которую я вставил выше, – http://codex.wordpress.org/Conditional_Tags

Цель моего кода: на основании какой страницы пользователь, мне нужно отображать разные баннеры. Поэтому каждая страница и ее подстраницы имеют один и тот же баннер.

 if ( is_page('114') || $post->post_parent == '114' ) { } 

Ошибка даже выше кода. Не знаю, почему $ post-> post_parentis не считается объектом.

Ответ @kaiser дает вам решение. Я вижу из вашего комментария, что вы не понимаете, поэтому я поддержал его ответ и перевел его в код:

 <?php $bannerimg = 'home.jpg'; $post = is_singular() ? get_queried_object() : false; if ( ! empty($post) && is_a($post, 'WP_Post') ) { if ( 'about' == $post->post_name || '2' == $post->post_parent ) { $bannerimg = 'about.jpg'; } elseif ( 'learning' == $post->post_name || '56' == $post->post_parent) ) { $bannerimg = 'teaching.jpg'; } elseif ( 'admissions' == $post->post_name || '15' == $post->post_parent ) { $bannerimg = 'admissions.jpg'; } } 

Обычно $post должен быть object являющимся instanceof WP_Post . Обычно объект имеет значение 0 если

  • родитель не установлен
  • тип сообщения не является иерархическим

Так что единственное, что может быть здесь, это то, что пост-объект не настроен должным образом. Убедитесь, что вы находитесь внутри цикла, вызвали the_post() или $custom_query->the_post() или использовали setup_postdata( $post ); ,

Btw, если у вас есть if/elseif/else , вы обычно можете избежать else, поскольку он похож на значение по умолчанию в switch . Просто установите $bannerimg = 'foo'; перед тем, if .