Obiect de tip WP_Error nu poate fi convertit în string - Soluții pentru eroarea în WordPress

18 apr. 2014, 21:50:15
Vizualizări: 16.2K
Voturi: 1

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);
  }
}

0
Toate răspunsurile la întrebare 1
0

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ă.

18 apr. 2014 21:54:23