Ошибка "Object of class WP_Error could not be converted to string" в WordPress
После удаления некоторых категорий (чего делать не следовало), я получаю следующую ошибку:
Catchable fatal error: Object of class WP_Error could not be converted to string in [FILENAME] on line 45
Вот файл, который вызвал ошибку. Привожу выдержку (строка 45 - $output .= '<a href="' . $link . '">' . $term->name. '</a>, ';
)
...
foreach($item['value'] as $value) {
$term = get_term($value, $fieldSettings['taxonomy']);
$link = get_term_link($term);
// ни одна опция не должна прерывать выполнение!
if(!$term) {
continue;
}
if(isset($formatterSettings['link_bool']) && $formatterSettings['link_bool']) {
$output .= '<a href="' . $link . '">' . $term->name. '</a>, ';
} else {
$output .= $term->name . ', ';
}
}
}
...
Как я могу исправить эту проблему? Я воссоздал все удаленные категории (у меня были резервные копии их имен и ярлыков), но ошибка осталась.
Спасибо за помощь!
Вот полный файл:
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);
// ни одна опция не должна прерывать выполнение!
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
может возвращать как объект WP_Error
, так и ложное значение, если термин не найден, либо сам объект термина.
Вы можете исправить это, добавив дополнительную проверку:
if (!$term) {
continue;
}
Превращается в:
if (!$term || is_wp_error($term)) {
continue;
}
Эту же проверку следует добавить перед вызовом get_term_link
.
$term = get_term($value, $fieldSettings['taxonomy']);
if (!$term || is_wp_error($term)) {
continue;
}
$link = get_term_link($term);
get_term
обычно возвращает WP_Error
, когда таксономия не существует или не зарегистрирована (вы можете посмотреть исходный код для получения дополнительной информации). Поэтому убедитесь, что таксономия существует. Если вы регистрируете таксономию, убедитесь, что код выше (который вызывает ошибку) выполняется после хука init
, где таксономия, скорее всего, регистрируется.
