Tentando obter propriedade de não objeto ao usar $ post-post_parent

3

Eu tenho o debug configurado como true e para exibir banners diferentes, estou usando tags condicionais como:

<?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
}   

?>

Isso resulta em erro como:

[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

A remoção de $ post- > post_parent corrige o aviso do PHP. Alguém pode me informar se estou fazendo algo errado?

Localização deste código:

Estou usando uma estrutura de código semelhante à acima no meu arquivo header.php. Isso não está dentro de nenhum loop de postagens. O custo que colei acima é de enlace

Finalidade do meu código: Com base na página do usuário, preciso exibir banners diferentes. Assim, cada página e suas subpáginas têm o mesmo banner.

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

Até mesmo o código gera o erro. Não sei por que $ post- > post_parentis não é considerado um objeto.

    
por Harish Chouhan 24.09.2013 / 02:13

2 respostas

4
A resposta do @ kaiser oferece a solução. Eu vejo do seu comentário que você não entende, então eu votei a resposta dele e traduza no código:

<?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';
  }
}
    
por gmazzap 24.09.2013 / 03:43
4

Normalmente, $post deve ser object , que é instanceof WP_Post . O objeto normalmente tem um padrão de 0 if

  • nenhum pai está definido
  • o tipo de postagem não é hierárquico

Então, a única coisa que pode estar aqui é que o objeto post não está configurado corretamente. Verifique se você está dentro de um loop, chamou the_post() ou $custom_query->the_post() ou usou setup_postdata( $post ); .

Btw, se você tiver if/elseif/else , normalmente poderá evitar o else, pois é semelhante ao padrão em switch . Basta definir $bannerimg = 'foo'; antes do if .

    
por kaiser 24.09.2013 / 02:20

Tags