Erro fatal catável do PHP: o object da class WP_Error não pôde ser convertido em string

Eu preciso de ajuda com isso:

Erro fatal Catchable PHP: Object of class WP_Error não pôde ser convertido em string em /hosting/www/ortopediairati.es/public/wp-content/themes/irati/rt-framework/functions/rt_breadcrumb.php on line 58

Eu atualizei o WordPress 4.8 e a web não está funcionando bem.

O arquivo completo está aqui:

<?php /* RT-Breadcrumb Function */ function rt_breadcrumb(){ global $taxonomy,$term_slug,$post,$delimiter; if(!get_option('rttheme_breadcrumb_menus')){ return false; } //Markup $before=''; $delimiter=' | '; /* WooCommerce Breadcrumb */ if ( function_exists( 'woocommerce_breadcrumb' ) ) { if( is_woocommerce() ){ $defaults = array( 'delimiter' => $delimiter, 'wrap_before' => $before, 'wrap_after' => $after, 'before' => '', 'after' => '', 'home' => null ); woocommerce_breadcrumb($defaults); return false; } } echo $before; //Home Page echo "".__( 'Home', 'rt_theme' ).""; // page parents function function page_parents($parent_page_id,$child_pages){ global $delimiter; $parent_page = get_page($parent_page_id); $page_parents = $delimiter."ID)."\" title=https://wordpress.stackexchange.com//questions/269841/php-catchable-fatal-error-object-of-class-wp-error-could-not-be-converted-to-st/\"". get_the_title($parent_page->ID) ."\" >". get_the_title($parent_page->ID) ."" .$child_pages; if ($parent_page->post_parent) page_parents($parent_page->post_parent,$page_parents); else echo $page_parents; } // term parents function function term_parents($term_id,$child_terms){ global $taxonomy,$delimiter; $parent_term = get_term_by('ID',$term_id, $taxonomy); $term_parents = $delimiter."slug,$taxonomy)."\" title=https://wordpress.stackexchange.com//questions/269841/php-catchable-fatal-error-object-of-class-wp-error-could-not-be-converted-to-st/\"". $parent_term->name ."\" >". $parent_term->name ."" .$child_terms; if ($parent_term->parent) term_parents($parent_term -> parent,$term_parents); else echo $term_parents; } //get start page function get_start_page($start_page){ global $delimiter; //start page parents $get_start_page=get_page($start_page); if ($get_start_page -> post_parent){ page_parents( $get_start_page -> post_parent,''); } //start page if ($start_page && !get_query_var('lang')) { echo $delimiter."". get_the_title($start_page) .""; } } //terms function term_links(){ global $taxonomy,$post_type,$term_slug,$delimiter; //Find start page and define taxonomy names if($taxonomy=="product_categories"){ $start_page=get_option('rttheme_product_list'); }elseif($taxonomy=="portfolio_categories"){ $start_page=get_option('rttheme_portf_page'); } //get start page if ($start_page) get_start_page($start_page); $term=get_term_by('slug',$term_slug, $taxonomy); //parent terms if (is_object($term) && $term -> parent){ echo term_parents($term -> parent,''); } //current term if(is_object($term) && $term->slug) echo $delimiter."slug,$taxonomy)."\" title=https://wordpress.stackexchange.com//questions/269841/php-catchable-fatal-error-object-of-class-wp-error-could-not-be-converted-to-st/\"". $term->name ."\" >". $term->name .""; } //Pages if ( is_page() ){ //parent pages if ($post -> post_parent){ page_parents( $post -> post_parent,''); } //current page echo $delimiter ."". $post->post_title; } //Single elseif (is_single() && !is_attachment()){ // Get post type $post_type = get_post_type(); //Taxonomies if($post_type == 'products' || $post_type == 'portfolio'){ term_links(); //current page echo $delimiter."". get_the_title() .""; }else{ //Categories //start page $start_page=get_option('rttheme_blog_page'); //get start page if ($start_page) get_start_page($start_page); $category_id = get_the_category(); $category_id = $category_id[0]->cat_ID;//only one category can be show in the list - the first one echo $delimiter; if($category_id){ echo get_category_parents($category_id, TRUE, $delimiter, FALSE ); } echo $post->post_title; } //Category }elseif (is_category()){ //start page $start_page=get_option('rttheme_blog_page'); //get start page if ($start_page) get_start_page($start_page); echo $delimiter."".get_category_parents(get_query_var('cat'), TRUE, $delimiter, FALSE); //Taxonomy }elseif (is_tax()){ term_links(); } else { echo $delimiter.""; wp_title(''); } echo $after; wp_reset_query(); } ?> 

Alguém poderia me ajudar?

Solutions Collecting From Web of "Erro fatal catável do PHP: o object da class WP_Error não pôde ser convertido em string"

A linha 58 como o erro indica é esta linha:

 $parent_term = get_term_by('ID',$term_id, $taxonomy); $term_parents = $delimiter."slug,$taxonomy)."\" title=\"". $parent_term->name ."\" >". $parent_term->name ."" .$child_terms; 

E nosso erro é:

O object da class WP_Error não pôde ser convertido em string

O que significa que uma dessas coisas sendo anexada não é uma "string" , mas na verdade um object WP_Error .

Eu gostaria de suspeitar de get_term_link , o que provavelmente é o que está retornando o object de erro, o que sugere que:

  • termo não existe
  • a taxonomia não está registrada ou é válida
  • os valores que estão sendo transmitidos são inesperadamente vazios
  • $parent_term não é um termo, mas um object de erro

O que nos leva à lição aqui:

Às vezes, as funções retornam objects de erro e você deve verificar isso, não apenas assumir que ele foi bem-sucedido

Como verificar erros

Vamos dar um exemplo que sempre falhará:

 $value = get_term_link( "not a real term","fake taxonomy" ); if ( is_wp_error( $value ) ) { // something went wrong } 

is_wp_error será verdadeiro se $value for um object de erro. Algumas funções podem retornar false ou null , então !empty( $value ) também é uma verificação útil

Os objects de erro podem conter códigos e mensagens de erro e você pode usar o método get_error_message() para exibi-los:

 $value = get_term_link( "not a real term","fake taxonomy" ); if ( is_wp_error( $value ) ) { // something went wrong echo $value->get_error_message(); } 

Você também pode definir $value manualmente em vez de um valor padrão

Uma nota final sobre globais

O código faz uso de variables ​​globais, mas essas variables ​​têm nomes super genéricos, como $taxonomy . Outros plugins também podem usá-los, e eles podem entrar em conflito. O mesmo se aplica aos nomes das funções.

Melhor

Prefixo-os:

 // term parents function function sergi_term_parents( $term_id, $child_terms ) { global $sergi_taxonomy, $sergi_delimiter; 

Melhor

Use a injeção de dependência e elimine os globals inteiramente:

 // term parents function function sergi_term_parents( $term_id, $child_terms, $taxonomy, $delimeter ){ 

Agora, a function do seu term_parents pode nunca entrar em conflito, e funciona para qualquer taxonomia ou delimitador