web-dev-qa-db-fra.com

get_term_children renvoie WP_Error pour la taxonomie personnalisée

Ce sur quoi je travaille est un formulaire d’option déroulante basé sur ajax qui renvoie des termes enfants en fonction de l’option sélectionnée.

Lorsque l'option est sélectionnée, une fonction est activée à l'aide de onchange, où le script récupère l'identificateur term_id et la taxonomie de l'option sélectionnée, puis les envoie au serveur.

Le script côté serveur que j'ai créé accepte $_POST, j'ai vérifié que les variables sont correctement affectées en les renvoyant au client et en consultant les journaux de la console.

<?php
//Include wordpress
require_once( 'wp-config.php' );
require_once( 'wp-includes/wp-db.php' );
$wpdb = new wpdb( DB_USER , DB_PASSWORD , DB_NAME , DB_Host );

if (isset($_POST)){
    $taxID = $_POST[id];
    $taxType = $_POST[tx];
}
else {
    echo "Error: invalid data recieved. Please contact the site administrator.";
    die();
}

$termchildren = get_term_children( $taxID, $taxType );

echo '<ul>';
foreach ( $termchildren as $child ) {
    $term = get_term_by( 'id', $child, $taxType );
    echo '<li><a href="' . get_term_link( $term->name, $taxType ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
die();
?>

Le but de ce script est de renvoyer du code HTML que je peux insérer dans un autre élément.
- L'ID à l'origine des problèmes est 4, qui contient un enfant avec l'ID 15
- La taxonomie de l'élément est classifieds_categories
- Transmettre ces valeurs manuellement ne fonctionne pas non plus.
- Lorsque je renvoie la lia href, l'erreur suivante apparaît:
Catchable fatal error: Object of class WP_Error could not be converted to string in ...

Est-ce que quelqu'un a des suggestions? Parce que franchement, je suis sur le point de lancer mon ordinateur portable vers la fenêtre la plus proche à ce stade.

1
DWils

Puisque get_term_link() retournera un objet WP_Error si le terme n’existe pas, vous pouvez essayer:

$termchildren = get_term_children( $taxID, $taxType );

echo '<ul>';
foreach ( $termchildren as $child ) {
    $term = get_term_by( 'id', $child, $taxType );

    $term_link = get_term_link( $term->name, $taxType );

    if( ! is_wp_error( $term_link ) )    
         echo '<li><a href="' . $term_link . '">' . $term->name . '</a></li>';

}
echo '</ul>';

il semble donc que vous essayez de faire écho à l'objet WP_Error.

Vous pouvez essayer de le déboguer avec:

if( is_wp_error( $term_link ) )    
    echo $term_link->get_error_message();
2
birgire

Même si vous faites AJAX faux , ce n'est pas votre problème. Le problème est cette ligne:

$wpdb = new wpdb( DB_USER , DB_PASSWORD , DB_NAME , DB_Host );

Mais je ne vois pas pourquoi vous avez besoin de l'un de ces éléments:

require_once( 'wp-includes/wp-db.php' );
$wpdb = new wpdb( DB_USER , DB_PASSWORD , DB_NAME , DB_Host );

Essayez le code sans ces lignes et ça marche, du moins quand j'essaye.

Mais s'il vous plaît faites AJAX à droite.

1
s_ha_dum