无法将WP_ERROR类的对象转换为字符串

时间:2014-04-18 作者:SPi

删除一些类别(不应该这样做)后,我得到以下错误

可捕获的致命错误: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);
  }
}

1 个回复
最合适的回答,由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, 分类法可能注册的地方。

结束

相关推荐

Displaying oEmbed errors?

有时,通过oEmbed嵌入项目是不可能的,例如,当YouTube视频已禁用嵌入时。The oEmbed service will return a 401 Unauthorized, 并且不会转换代码。有没有办法通知用户这一点?当前的工作流是非直观的(至少对我来说),我更喜欢在WordPress页面上,或者更好的是,在编辑器中显示一条消息,说明对象无法嵌入。