web-dev-qa-db-fra.com

Erreur de modèle personnalisée personnalisée: erreur fatale capturable: l'objet de la classe WP_Error n'a pas pu être converti en chaîne.

Vous essayez de chasser une erreur sur cette page :

Erreur fatale capturable: l'objet de la classe WP_Error n'a pas pu être converti en chaîne.

J'ai un type de message personnalisé et une taxonomie:

Taxonomie: team_categories

  • Terme: "Comités" (entre autres)

    • Mandats pour enfants dans les comités: éducation permanente, éthique, action législative, etc. (* cette partie semble fonctionner)

      • Membres de l'équipe dans chaque comité (ne travaillent pas)

Je souhaite répertorier les termes enfants sur la page de modèle de taxonomie "Comités" et afficher les membres de chaque comité, par exemple:

Comité d'éducation permanente

  • Jane Doe
  • John Brown
  • etc.

Comité d'éthique

  • Jack Jones
  • Ann Acme
  • etc.

Voici le code actuel:

$taxonomyName = "team_categories";
//This gets top layer terms only.  This is done by setting parent to 0.  
$parent_terms = get_terms(
    $taxonomyName, 
    array( 'parent' => 0, 'orderby' => 'slug', 'hide_empty' => false )
);   
echo '<ul>';
foreach ( $parent_terms as $pterm ) {
    //Get the Child terms
    $terms = get_terms(
        $taxonomyName, 
        array( 'parent' => $pterm->term_id, 'orderby' => 'slug', 'hide_empty' => false )
    );
    foreach ( $terms as $term ) {
        echo '<li><a href="' . get_term_link( $term->name, $taxonomyName ) . '">' . 
            $term->name . '</a></li>';  
    }
}
echo '</ul>';

L'erreur semble être ici:

        echo '<li><a href="' . get_term_link( $term->name, $taxonomyName ) . '">' . 
            $term->name . '</a></li>'; 

Mise à jour:

Le code suivant me rend sacrément proche de ce que je recherche:

$term_id = 26; // id of committees
$taxonomy_name = 'team_categories';
$termchildren = get_term_children( $term_id, $taxonomy_name );                      
echo '<ul>';
foreach ( $termchildren as $child ) {
    $term = get_term_by( 'id', $child, $taxonomy_name );
    echo '<li><a href="' . get_term_link( $child, $taxonomy_name ) . '">' . 
        $term->name . '</a></li>';
}
echo '</ul>';

Il répertorie toutes les sous-catégories de la catégorie "Comités".

Comment puis-je afficher les messages de chaque catégorie sous chaque en-tête de catégorie? Le nom du type de message personnalisé est "équipe".

1
Trish Thompson

Eh bien, vous echo un objet. Ne faites jamais juste écho si vous êtes pas sûr de ce que vous obtenez en retour. Jetez un coup d’œil à la fonction: L’erreur elle-même est assez claire:

function get_term_link( $term, $taxonomy = '') {
    global $wp_rewrite;

    if ( !is_object($term) ) {
        if ( is_int($term) ) {
            $term = get_term($term, $taxonomy);
        } else {
            $term = get_term_by('slug', $term, $taxonomy);
        }
    }

    if ( !is_object($term) )
        $term = new WP_Error('invalid_term', __('Empty Term'));

Vous semblez ne pas recevoir d'objet en retour, votre $term->name est donc peut-être incorrect (ou vide).

Pour rechercher une erreur, utilisez is_wp_error() et envoyez le message:

$link = get_term_link( etc );
if ( is_wp_error( $link ) )
    echo $link->get_error_message();

Ensuite, vous devriez obtenir un résultat correct de ce qui est arrivé et être capable de le réparer.

1
kaiser

EDIT: J'avais suggéré d'ajouter endforeach;, mais je viens de relooker l'exemple de code dans le codex et ils ne l'utilisent pas, donc cela ne semble pas nécessaire.

Une autre suggestion serait de suivre l'exemple pour get_term_link() sans utiliser forfor () imbriqué pour voir si vous pouvez le générer pour obtenir les résultats souhaités du "terme de couche supérieure".

Un des avantages de leur exemple de code est que cela semble se poursuivre par une erreur:

$terms = get_terms( 'team_categories' );

echo '<ul>';

foreach ( $terms as $term ) {

    // Sanitize the term, since we will be displaying it.
    $term = sanitize_term( $term, 'team_categories' );

    $term_link = get_term_link( $term, 'team_categories' );

    // If there was an error, continue to the next term.
    if ( is_wp_error( $term_link ) ) {
        continue;
    }

    // We successfully got a link. Print it out.
    echo '<li><a href="' . esc_url( $term_link ) . '">' . $term->name . '</a></li>';
}

echo '</ul>';

Si cela fonctionne, ajoutez une complexité supplémentaire en utilisant l'exemple de style de formatage du code.

0
Stephen S.

Ce qui a fonctionné pour moi a été de corriger ma syntaxe pour faire référence à la partie de l'objet dans le tableau.

Le code correct dans mon cas était echo $web_desc_title[$i]->name;

0
Jeremy Woods