wake-up-neo.com

Füge einen Button zu users.php hinzu

Ich arbeite an einem Plugin, das Metadaten für jeden Benutzer zur Tabelle users.php hinzufügt, die durch Hinzufügen von Spalten angezeigt wird. Ich habe das getan, möchte aber auch eine Schaltfläche hinzufügen, die die Metadaten der Benutzer löscht, wenn sie gedrückt werden. Ich bin nicht sicher, wie ich es hinzufügen kann. Ich möchte, dass es rechts neben dem "Ändern" -Button steht. Ich dachte, dass das Verhalten darin besteht, die Seite neu zu laden, aber wenn dies der Fall ist, werden die Metadaten für jeden Benutzer gelöscht.

Wo würde ich anfangen, diese Schaltfläche zur Seite hinzuzufügen? Ist dies der beste Weg, dies zu tun?

Vielen Dank!

2
graphical_force

Okay ... Sie KÖNNTEN einen Button hinzufügen, wie Sie ihn erwähnt haben. aber ich denke, das wird viel mehr Code erfordern. Die users.php-Seite verwendet die List Table-Klasse WP. Dies bedeutet, dass wir uns in den bulk actions einhängen und dort unseren benutzerdefinierten Wert hinzufügen können.

Erstellen wir also eine Funktion, um einen neuen Wert in das Dropdown-Feld für Massenaktionen einzufügen:

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
}

Dadurch wird der Wert "Benutzer-Meta löschen" zum Dropdown-Feld für Massenaktionen hinzugefügt. Jetzt brauchen wir eine Funktion, um die gesendeten Daten tatsächlich zu verarbeiten:

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.
            }
        }
    }
}

Hier durchlaufen wir jeden Benutzer, neben dem wir ein Häkchen gesetzt haben. Anschließend wird der meta_key gelöscht, den Sie für jeden dieser ausgewählten Benutzer angegeben haben.

HINWEIS: Sie müssen die Zeichenfolge YOUR_METADATA_KEY_TO_BE_REMOVED in den tatsächlichen Namen des Metaschlüssels ändern, den Sie löschen möchten. Wenn Sie mehr als einen einzelnen Metaschlüssel löschen möchten, müssen Sie mehrere delete_user_meta()-Funktionen hinzufügen.

5
josh

Obwohl der JavaScript-Ansatz mit dem Haken admin_footer, was @josh erwähnt, in den meisten Fällen funktioniert. Es ist definitiv nicht der beste Ansatz, der Dropdown-Liste für Massenaktionen eine Option hinzuzufügen. Weil es dafür einen bestimmten Haken gibt, wooohoee yeah! Probieren Sie den Filter-Hook bulk_actions-{$screen_id} aus.

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

Nachdem Sie die Ansicht vorbereitet haben, ist es Zeit, den Controller für diese Aktion einzurichten. Wo werden wir den handle_bulk_actions-{$screen_id} Filter Hook verwenden.

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

Quelle: Benutzerdefinierte Massenaktionen

1
Fleuv