Agregar un botón a users.php

2

Estoy trabajando en un complemento que agrega metadatos para cada usuario a la tabla users.php que se muestra al agregar columnas. Lo he hecho, pero me gustaría agregar también un botón que eliminará los metadatos de los usuarios cuando se los presione. No estoy seguro de cómo puedo agregarlo. Me gustaría que esté a la derecha del botón "cambiar". Pensé que el comportamiento sería volver a cargar la página, pero cuando lo haga, haré que elimine los metadatos de cada usuario.

¿Dónde empezar a agregar ese botón a la página? ¿Es esta la mejor manera de hacerlo?

¡Gracias!

    
pregunta graphical_force 08.11.2013 - 02:38

2 respuestas

5

Bien ... PODRÍAS añadir un botón como mencionaste; Pero creo que esto va a requerir mucho más código. La página users.php está usando la clase de tabla de lista WP ... lo que significa que podemos enlazar con bulk actions y agregar nuestro valor personalizado allí.

Entonces, vamos a crear una función para agregar un nuevo valor en el cuadro desplegable de acciones masivas:

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
}

Esto agregará el valor "Eliminar meta del usuario" al cuadro desplegable de acciones masivas. Ahora, necesitamos una función para procesar realmente los datos que se envían:

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

Aquí, iteramos a través de cada uno de los usuarios a los que colocamos una marca de verificación junto a. Luego, eliminará el meta_key que especificó para cada uno de los usuarios seleccionados.

NOTA: debe cambiar la cadena YOUR_METADATA_KEY_TO_BE_REMOVED al nombre real de la meta_key que desea eliminar. Si desea eliminar más de una meta clave, deberá agregar varias funciones delete_user_meta() .

    
respondido por el josh 08.11.2013 - 06:38
1

Aunque el enfoque de JavaScript que utiliza el enlace admin_footer enlaza lo que @josh menciona funciona en la mayoría de los casos. Definitivamente no es el mejor enfoque para agregar una opción al menú desplegable de acciones en masa. Porque hay un gancho específico para eso, ¡wooohoee sí! Pruebe el gancho de filtro bulk_actions-{$screen_id} .

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

Una vez que haya preparado la vista, es hora de configurar el controlador para esa acción. Donde usaremos el gancho de filtro 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);

Fuente: Acciones masivas personalizadas

    
respondido por el Fleuv 19.02.2018 - 19:51

Lea otras preguntas en las etiquetas