web-dev-qa-db-fra.com

Comment supprimer les termes de taxonomie personnalisés dans le fichier uninstall.php du plugin?

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.

4
edeneye

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;                 
} 
5
brasofilo

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);
4
edeneye

Appelez votre fonction de nettoyage lors de la désinstallation de votre plugin via register_uninstall_hook

0
Ivan Hanák