web-dev-qa-db-fra.com

Supprimer une catégorie spécifique lors de la suppression d'un utilisateur

J'utilise la fonction suivante pour créer une catégorie de portefeuille nommée "tips_username" lorsqu'un utilisateur s'enregistre sur mon site Web.

add_action('user_register', 'auto_create_traveltip_category');
function auto_create_traveltip_category($user_id) {
    $tip_category_name = 'tips_' . $_POST['user_login'];
    wp_insert_term($tip_category_name, 'portfolio_entries', array(
            'description' => 'Travel Tip for ' . $_POST['user_login'],
            'slug'        => 'tips-' . $_POST['user_login'],
            'parent'      =>  '',
            )
    );
}

Cela fonctionne bien, mais il me faut maintenant une fonction pour supprimer automatiquement la catégorie lorsque je supprime un utilisateur, par exemple dans la liste des utilisateurs. J'ai implémenté la fonction suivante en s'inspirant de https://codex.wordpress.org/Plugin_API/Action_Reference/delete_user :

function delete_traveltip_category_with_user($user_id) {
    global $wpdb;
    $user_obj = get_userdata($user_id);
    $tip_cat_name = 'tips_' . $user_obj->user_login;
    $tip_cat_desc = get_term_by('name', $tip_cat_name, 'portfolio_entries');
    $tip_cat_id = $tip_cat_desc->term_id;
    wp_delete_term( $tip_cat_id, 'portfolio_entries' );
}
add_action( 'delete_user', 'delete_traveltip_category_with_user' );

Malheureusement ça ne marche pas. Pouvez-vous regarder et me dire ce qui ne va pas? Merci!!

4
Claudio Sinopoli
  1. delete_user Cette action implique deux paramètres: $id et $reassign. Donc, vous devez spécifier deux paramètres pour le hook.
  2. Parce que sanitize_term() et sanitize_user() utilisent différentes méthodes pour nettoyer les chaînes, 'tips_' . $_POST['user_login'] et 'tips_' . $user_obj->user_login ne sont pas toujours la même chaîne. Il est donc préférable d'utiliser 'tips_' . sanitize_user($_POST['user_login') comme nom du terme lors de l'insertion du terme.
1
MinhTri