Obiect de tip WP_Error nu poate fi convertit în string - Soluții pentru eroarea în WordPress
După ce am șters unele categorii (nu trebuia să fac asta), primesc următoarea eroare:
Catchable fatal error: Object of class WP_Error could not be converted to string in [FILENAME] on line 45
Iată fișierul care a cauzat eroarea. Fragment relevant (linia 45 este $output .= '<a href="' . $link . '">' . $term->name. '</a>, ';
):
...
foreach($item['value'] as $value) {
$term = get_term($value, $fieldSettings['taxonomy']);
$link = get_term_link($term);
// nicio opțiune nu trebuie să întrerupă execuția!
if(!$term) {
continue;
}
if(isset($formatterSettings['link_bool']) && $formatterSettings['link_bool']) {
$output .= '<a href="' . $link . '">' . $term->name. '</a>, ';
} else {
$output .= $term->name . ', ';
}
}
}
...
Cum pot rezolva această problemă? Am recreat toate categoriile șterse (am avut backup pentru nume și slug-uri), dar eroarea persistă.
Vă mulțumesc pentru ajutor!
Iată fișierul complet:
namespace Hydra\Formatters;
use Hydra\Builder;
class TaxonomyFormatter extends BasicFormatter {
public function __construct() {
$this->name = 'taxonomy';
}
public function render(\HydraFieldViewRecord $viewView, $post) {
$items = $this->getValues($viewView);
if(!$items) {
return $items;
}
$fieldSettings = $viewView->field->attributes;
$formatterSettings = $viewView->settings;
$meta = $viewView->field->meta;
$output = '';
foreach ($items as $item) {
if(is_string($item['value'])) {
if($item['value'] == 0) {
continue;
}
$item['value'] = array($item['value']);
}
foreach($item['value'] as $value) {
$term = get_term($value, $fieldSettings['taxonomy']);
$link = get_term_link($term);
// nicio opțiune nu trebuie să întrerupă execuția!
if(!$term) {
continue;
}
if(isset($formatterSettings['link_bool']) && $formatterSettings['link_bool']) {
$output .= '<a href="' . $link . '">' . $term->name. '</a>, ';
} else {
$output .= $term->name . ', ';
}
}
}
$output = trim($output, ', ');
$terms = $output;
$output = '';
$output .= '<div ' . $this->printAttributes($viewView) . '>';
if ($meta->prefix) {
$output .= "<div class=\"field-prefix\" >" . $meta->prefix . "</div>";
}
$output .= "<div class=field-value>" . $terms . "</div>";
if ($meta->suffix) {
$output .= "<div class=\"field-suffix\">" . $meta->suffix . "</div>";
}
$output .= "</div>";
return $output;
}
public function getSettingsForm($parentElement) {
parent::getSettingsForm($parentElement);
$parentElement->addField('checkbox', array('link_bool', __('Link to taxonomy page', 'hydraforms')))
->setDefaultValue(false);
}
}
get_term
poate returna un obiect WP_Error
în plus față de o valoare falsă pentru termenul negăsit sau un rând de termen real.
Rezolvați această problemă prin adăugarea unei verificări suplimentare:
if (!$term) {
continue;
}
Devine:
if (!$term || is_wp_error($term)) {
continue;
}
De asemenea, ar trebui să faceți acest lucru înainte de apelul get_term_link
.
$term = get_term($value, $fieldSettings['taxonomy']);
if (!$term || is_wp_error($term)) {
continue;
}
$link = get_term_link($term);
get_term
returnează de obicei un WP_Error
atunci când taxonomia nu există sau nu este înregistrată (puteți verifica codul sursă pentru mai multe informații). Așadar, asigurați-vă că aceasta există. Dacă îl înregistrați, asigurați-vă că codul de mai sus (care provoacă eroarea) se execută după init
, unde taxonomia este probabil înregistrată.
