Попытка получить свойство ошибки, отличной от объекта, используя get_post_meta ()

Я сделал простую функцию для post_meta, в functions.php :

 // Top Sub Heading (top_sub) FROM CUSTOM FIELD function topSub( $Trunckvalue = null ) { global $post; $TopSub = get_post_meta( $post->ID, 'top_sub', $single=true ); $shortTopSub = trunck_string( $TopSub, $Trunckvalue, true ); if ( !$TopSub == NULL ) { ?> <h3 class="top-sub"><?php echo $shortTopSub; ?></h3> <!-- .top-sub --> <?php } return $shortTopSub; } add_action( 'init', 'topSub' ); 

И в моей теме я использую его как: topSub(300); , Здесь trunck_string() является другой действующей функцией – не нужно беспокоиться об этом.

Функция работает нормально. Но с WP_DEBUG true – отображается ошибка:

Примечание: попытка получить свойство не-объекта … строка 88

И в строке # 88 находится:

 $TopSub = get_post_meta( $post->ID, 'top_sub', $single=true ); 

Я использовал это много раз, но на этот раз я получаю ошибку. Что случилось с моим кодом?

Для получения вашей информации: top_sub является необязательным настраиваемым полем. На top_sub может быть много незаполненных пользовательских полей, и их может быть много.

Solutions Collecting From Web of "Попытка получить свойство ошибки, отличной от объекта, используя get_post_meta ()"

$post никогда не устанавливается в init когда я проверяю это –

 function topSub( $Trunckvalue = null ) { global $post; var_dump($post); } add_action( 'init', 'topSub' ); 

Самый ранний крючок, который я могу найти (экспериментированием, а не каноническим утверждением), является wp .

Кроме того, $post устанавливается на архивные страницы, а также на «одиночные» страницы. На этих страницах архива устанавливается первый пост в Loop.

Автоответ от @MayeenulIslam есть комментарий, который …

 //check if post is object otherwise you're not in singular post 

Это утверждение неверно.

Я не ожидаю, что код или сам ответ будут работать как ожидалось по обоим причинам. Решение, по моему чтению, должно быть:

 // Top Sub Heading (top_sub) FROM CUSTOM FIELD function topSub( $Trunckvalue = null ) { if (!is_singular()) return; global $post; $TopSub = get_post_meta( $post->ID, 'top_sub', $single=true ); $shortTopSub = trunck_string( $TopSub, $Trunckvalue, true ); if ( !$TopSub == NULL ) { ?> <h3 class="top-sub"><?php echo $shortTopSub; ?></h3> <!-- .top-sub --> <?php } return $shortTopSub; } add_action( 'wp', 'topSub' ); // or a later hook depending on circumstances 

Я также озадачен этой строкой:

 if ( !$TopSub == NULL ) { ?> 

Вы проверяете, не является ли $TopSub NULL но на самом деле использует $shortTopSub в условном $shortTopSub . Мне кажется, что это должно быть переписано:

 if ( !empty($shortTopSub) ) { ?> <h3 class="top-sub"><?php echo $shortTopSub; ?></h3> <!-- .top-sub --> <?php } 

Получил ответ от:
» Попытка получить свойство не-объекта – themeforest.net :

Проверьте переменную $post – это объект или нет:

  global $post; //check if post is object otherwise you're not in singular post if( !is_object($post) ) return; $TopSub = get_post_meta( $post->ID, 'top_sub', $single=true ); 
  • Функция, используемая в WordPress: Reference ^ .
  • Это функция PHP: is_object ^ в php.net

is_object – определяет, является ли переменная объектом