Eliminando usuarios del front-end con wp_delete_user ()

2

Me gustaría que los administradores puedan eliminar usuarios de la interfaz con el clic de un botón. ¿Cómo podría usar la función wp_delete_users () para crear dicho botón en la interfaz si se proporciona la identificación del usuario?

    
pregunta jetlej 11.03.2012 - 23:29

2 respuestas

4

Podría usar AJAX para solicitar una 'acción' personalizada y enviar el ID de los usuarios. Alternativamente, 'publique' la acción y el ID de usuario en la misma página. Ambos son esencialmente lo mismo, pero el primero no requiere que se recargue la página.

Hay muchos temas en este sitio que tratan con AJAX, así que omitiré los detalles (consulte ajax etiqueta para más información).

De cualquier manera, desea establecer la acción en 'myprefix_delete_user', y 'user_id' en el ID del usuario apropiado.

Método Ajax

El envío de una solicitud ajax con la acción 'myprefix_delete_user' disparará los ganchos:

  • wp_ajax_myprefix_delete_user - si has iniciado sesión
  • wp_ajax_nopriv_myprefix_delete_user - si está desconectado

Solo queremos hacer algo si estamos conectados, así que adjuntamos una devolución de llamada solo al primer enlace:

add_action('wp_ajax_myprefix_delete_user','myprefix_delete_user_cb');
function myprefix_delete_user_cb(){
    //You should check nonces and user permissions at this point.
    $user_id = int_val($_REQUEST['user_id']);
    wp_delete_user($user_id);
    exit();
}

método 'POST / GET'

(no estaba seguro de cómo llamar a este método ...). Funciona de la misma manera. Nuevamente 'publicas' las acciones y las variables user_id. Puedes hacerlo construyendo un enlace:

$user_id=9 //ID of the user to be deleted.
$url = add_query_arg(array('action'=>'myprefix_delete_user', 'user_id'=>$user_id));
echo  "<a href='".$url. "'>Delete User</a>"; 

Este 'publica' ( no del todo ) los datos a la página actual. Luego se engancha en ' init ' si la acción está establecida:

if(isset($_REQUEST['action']) && $_REQUEST['action']=='myprefix_delete_user')
    add_action('init','myprefix_delete_user_cb');

Se puede usar la misma función de devolución de llamada, con los siguientes cambios:

  • Eliminar exit();
  • Es posible que desee usar wp_redirect para redireccionar a la misma página. Al redirigir, si un usuario hace clic en actualizar, no intenta volver a realizar la eliminación.

Tenga en cuenta, No he realizado ninguna verificación de permisos o permisos . Realmente deberías hacer esto. El último es un simple current_user_can . La forma en que lo haga dependerá de qué método, pero lo aliento a lea esto .

Esta pregunta es bastante similar y puede ayudar:

respondido por el Stephen Harris 12.03.2012 - 12:47
2

La respuesta anterior tiene un error y una omisión (no estoy seguro de por qué tiene 4 controles)

1) int_val no es una función WP intval es una función WP

2) Necesitas include("./wp-admin/includes/user.php" ) para llamar a wp_delete_user

Quería eliminar usuarios sin ir al panel de administración. Aquí está la solución de código de trabajo:

add_action('init','prefix_delete_user');
function prefix_delete_user() {
if(isset($_REQUEST['action']) && $_REQUEST['action']=='prefix_delete_user') {
   include("./wp-admin/includes/user.php" );
   //check admin permissions.
   if (current_user_can('edit_users')) {
       $user_id = intval($_REQUEST['user_id']);
       wp_delete_user($user_id);
       exit();
   }
}
}

La acción sucede cuando publicas esto

http://website.com/?action=prefix_delete_user&user_id=<ID>

Añade a tus funciones.php

    
respondido por el Katie Serano 25.07.2015 - 00:33

Lea otras preguntas en las etiquetas