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

Les extensions et les thĂšmes WordPress ont souvent recours aux taxonomies afin de classer vos contenus et ainsi proposer des filtres de recherche pour vos utilisateurs.

N.B : l’astuce prĂ©sentĂ©e ici ne s’applique pas aux catĂ©gories et aux Ă©tiquettes de WordPress. De plus, ce type de modification n’est pas sans consĂ©quence : il est probable que vous deviez adapter votre thĂšme et / ou les extensions concernĂ©es.

En natif, les catégories et les étiquettes sont des taxonomies pour les articles mais la plupart des projets en utilisent pour couvrir leurs propres besoins. Un simple hook nous permet de les désactiver.

Version 1

Dans le fichier functions.php de votre thĂšme ou via un mu-plugins, collez ces lignes de code :

<?php if (!defined('ABSPATH')) die('Restricted Area');


/*
* Plugin Name: Unregister Taxonomies
* Description: Properly disable any WordPress taxonomy.
* Version: 20160901
* Author: Aurélien Denis (Neticpro)
* Author URI: https://wpchannel.com/desactiver-taxonomie-type-de-contenu-personnalise/
*/


function wpc_unregister_job_listing_type() {
	unregister_taxonomy('job_listing_type'); // Specify the taxonomy to unregister
}
add_action('init', 'wpc_unregister_job_listing_type');

Créez et nommez votre fichier mu-unregister-taxonomies.php

Vous devez modifier la ligne 12 et spĂ©cifier les taxonomies que vous souhaitez dĂ©sactiver. Pour l’identifier, ouvrez celle concernĂ©e dans votre back-office puis rĂ©cupĂ©rez l’identifiant Ă  partir de l’URL. Un exemple ci-dessous avec l’extension WP Job Manager pour les types d’offres :

/wp-admin/edit-tags.php?taxonomy=job_listing_type&post_type=job_listing

Ici, la taxonomie est job_listing_type.

Notez que la dĂ©sactivation d’une taxonomie ne supprime en rien les termes qui lui auraient Ă©tĂ© prĂ©alablement affectĂ©s. Je vous recommande donc de les supprimer en amont. Une fois le code en place, vous obtiendrez le message suivant : Taxonomie non valide

Version 2

Ci-dessous, un autre code qui vérifie de trouver en base la taxonomie, et la supprime dans les rÚgles.

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

Sources

  • https://wordpress.stackexchange.com/users/29049/edeneye
  • https://wpchannel.com/wordpress/tutoriels-wordpress/desactiver-taxonomie-wordpress