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 li
a 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.
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();
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.