J'écris le fichier uninstall.php de mon plugin et je voudrais qu'il supprime tous les termes créés dans la taxonomie personnalisée du plugin.
Dans le fichier uninstall.php du plugin, j'utilise ceci:
// Delete all custom terms for this taxonomy
$terms = get_terms('custom_taxonomy');
foreach ($terms as $term) {
wp_delete_term( $term->ID, 'custom_taxonomy' );
}
Le problème semble être que la taxonomie personnalisée n'est pas encore enregistrée, donc get_terms renvoie une erreur pour "taxonomie invalide". Par conséquent, je ne peux pas supprimer les termes personnalisés de cette manière, ce qui semble le moyen le plus simple de le faire. .
Si la taxonomie personnalisée n'est pas enregistrée lors de l'appel de uninstall.php, comment puis-je l'avoir pour que mon plug-in puisse nettoyer ses données personnalisées?
Toute aide est grandement appréciée.
Merci.
Utiliser le hook de désinstallation serait légitimesi cela fonctionnait, mais la même erreur que le fichier de désinstallation est générée. Il aurait plus de chance de fonctionner puisqu'il charge le fichier de plugin principal pour effectuer la fonction de désinstallation, mais si la taxonomie n'est plus enregistrée (et ce n'est pas le cas, nous devons la désactiver avant la désinstallation), WP ne peut pas utiliser get_terms
.
Adapter la fonction suivante depuis cette réponse de débordement de pile devrait faire le travail:
function load_terms($taxonomy){
global $wpdb;
$query = 'SELECT DISTINCT
t.name
FROM
`wp-cls`.wp_terms t
INNER JOIN
`wp-cls`.wp_term_taxonomy tax
ON
`tax`.term_id = `t`.term_id
WHERE
( `tax`.taxonomy = \'' . $taxonomy . '\')';
$result = $wpdb->get_results($query , ARRAY_A);
return $result;
}
Sur la base des informations de brasofilo, voici ce que j'ai fini par faire:
function delete_custom_terms($taxonomy){
global $wpdb;
$query = 'SELECT t.name, t.term_id
FROM ' . $wpdb->terms . ' AS t
INNER JOIN ' . $wpdb->term_taxonomy . ' AS tt
ON t.term_id = tt.term_id
WHERE tt.taxonomy = "' . $taxonomy . '"';
$terms = $wpdb->get_results($query);
foreach ($terms as $term) {
wp_delete_term( $term->term_id, $taxonomy );
}
}
// Delete all custom terms for this taxonomy
delete_custom_terms(LISTING_TAXONOMY);
Appelez votre fonction de nettoyage lors de la désinstallation de votre plugin via register_uninstall_hook