web-dev-qa-db-fra.com

Ajouter un bouton à users.php

Je travaille sur un plug-in qui ajoute des métadonnées pour chaque utilisateur à la table users.php qui s'affiche en ajoutant des colonnes. Je l'ai fait, mais je voudrais aussi ajouter un bouton qui supprimera les métadonnées des utilisateurs lorsque vous appuyez dessus. Je ne sais pas comment je peux l'ajouter. Je voudrais que ce soit à droite du bouton "changer". Je pensais que le comportement consisterait à recharger la page, mais lorsque ce sera le cas, je lui demanderai de supprimer les métadonnées pour chaque utilisateur.

Où pourrais-je commencer à ajouter ce bouton à la page? Est-ce la meilleure façon de s'y prendre?

Merci!

2
graphical_force

Ok .. vous pourriez ajouter un bouton comme vous l'avez mentionné; mais je pense que cela va nécessiter beaucoup plus de code. La page users.php utilise la classe WP List Table .., ce qui signifie que nous pouvons nous connecter au bulk actions et y ajouter notre valeur personnalisée.

Créons donc une fonction pour ajouter une nouvelle valeur dans la liste déroulante des actions en bloc:

add_action('admin_footer', 'my_user_del_button');
function my_user_del_button() {
    $screen = get_current_screen();
    if ( $screen->id != "users" )   // Only add to users.php page
        return;
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            $('<option>').val('del_user_meta').text('Delete User Meta').appendTo("select[name='action']");
        });
    </script>
    <?php
}

Cela ajoutera la valeur "Delete User Meta" à la liste déroulante des actions en bloc. Maintenant, nous avons besoin d’une fonction pour traiter les données envoyées:

add_action('load-users.php', 'my_users_page_loaded');
function my_users_page_loaded() {
    if(isset($_GET['action']) && $_GET['action'] === 'del_user_meta') {  // Check if our custom action was selected
        $del_users = $_GET['users'];  // Get array of user id's which were selected for meta deletion
        if ($del_users) {  // If any users were selected
            foreach ($del_users as $del_user) {
            delete_user_meta($del_user, 'YOUR_METADATA_KEY_TO_BE_REMOVED');  // Change this meta key to match the key you would like to delete; or an array of keys.
            }
        }
    }
}

Ici, nous parcourons chacun des utilisateurs pour lesquels nous avons placé une coche. Ensuite, le meta_key que vous avez spécifié pour chacun des utilisateurs sélectionnés sera supprimé.

REMARQUE: vous devez remplacer la chaîne YOUR_METADATA_KEY_TO_BE_REMOVED par le nom réel de la clé méta que vous souhaitez supprimer. Si vous souhaitez supprimer plusieurs clés méta, vous devez ajouter plusieurs fonctions delete_user_meta().

5
josh

Bien que l'approche JavaScript utilisant le hook admin_footer que @josh mentionne fonctionne dans la plupart des cas. Ce n'est certainement pas la meilleure approche pour ajouter une option à la liste déroulante des actions en masse. Parce qu'il y a un crochet spécifique pour ça, wooohoee yeah! Essayez le crochet de filtre bulk_actions-{$screen_id}.

add_filter('bulk_actions-users', function($actions) {
    $actions['foo'] = __('Foo bar', 'my-namespace');
    return $actions;
});

Une fois la vue prête, il est temps de configurer le contrôleur pour cette action. Où nous allons utiliser le crochet de filtre handle_bulk_actions-{$screen_id}.

add_filter('handle_bulk_actions-users', function($redirect, $action, $ids) {
    foreach ($ids as $id) {
        // Perform action for specific id.
    }
    return $redirect;
}, 10, 3);

Source: Actions groupées personnalisées

1
Fleuv