删除一些类别(不应该这样做)后,我得到以下错误
可捕获的致命错误:WP\\u error类的对象无法转换为第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);
// no option may inerrupt !
if(!$term) {
continue;
}
if(isset($formatterSettings[\'link_bool\']) && $formatterSettings[\'link_bool\']) {
$output .= \'<a href="\' . $link . \'">\' . $term->name. \'</a>, \';
} else {
$output .= $term->name . \', \';
}
}
}
...
如何解决此问题?我重新创建了所有已删除的类别(我备份了它们的名称和slug),但错误仍然存在。
谢谢你的帮助!
这是完整的文件
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);
// no option may inerrupt !
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);
}
}
最合适的回答,由SO网友:chrisguitarguy 整理而成
get_term
可以返回WP_Error
对象,以及找不到术语的falsy值或实际术语行。
您可以通过添加额外的检查来解决此问题:
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
当分类法不存在或未注册时(您可以
look at the source 了解更多信息)。这是非常肯定的。如果要注册它,请确保上述代码(导致错误的代码)发生在
init
, 分类法可能注册的地方。