Eliminar usuarios desde el frontend con wp_delete_user()

12 mar 2012, 00:29:34
Vistas: 13.5K
Votos: 3

Me gustaría que los administradores puedan eliminar usuarios desde el frontend con solo hacer clic en un botón. ¿Cómo podría usar la función wp_delete_user() para crear dicho botón en el frontend si se proporciona el ID del usuario?

0
Todas las respuestas a la pregunta 2
1

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

1) int_val no es una función de WP, intval sí es una función de 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 funcional:

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" );
   //verificar permisos de administrador.
   if (current_user_can('edit_users')) {
       $user_id = intval($_REQUEST['user_id']);
       wp_delete_user($user_id);
       exit();
   }
}
}

La acción ocurre cuando envías esto:

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

Añade esto a tu functions.php

25 jul 2015 01:33:25
Comentarios

No necesitas incluir ningún archivo para que wp_delete_user funcione.

jetlej jetlej
1 ago 2015 03:11:22
1

Podrías usar AJAX para solicitar una 'acción' personalizada y enviar el ID del usuario. Alternativamente, puedes 'enviar' (post) la acción y el ID de usuario a la misma página. Ambos métodos son esencialmente lo mismo, pero el primero no requiere recargar la página.

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

En cualquier caso, deberás establecer action como 'myprefix_delete_user' y 'user_id' como el ID del usuario correspondiente.

Método AJAX

Al enviar una solicitud AJAX con la acción 'myprefix_delete_user' se activarán los hooks:

  • wp_ajax_myprefix_delete_user - si estás logeado
  • wp_ajax_nopriv_myprefix_delete_user - si no estás logeado

Solo queremos hacer algo si el usuario está logeado, así que adjuntamos un callback únicamente al primer hook:

add_action('wp_ajax_myprefix_delete_user','myprefix_delete_user_cb');
function myprefix_delete_user_cb(){
    // Deberías verificar nonces y permisos de usuario en este punto.
    $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 manera similar. Nuevamente 'envías' (post) las variables action y user_id. Puedes hacerlo construyendo un enlace:

$user_id=9 // ID del usuario a eliminar.
$url = add_query_arg(array('action'=>'myprefix_delete_user', 'user_id'=>$user_id));
echo  "<a href='".$url. "'>Eliminar Usuario</a>"; 

Esto 'envía' (no exactamente) los datos a la página actual. Luego enganchas a '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 callback, con los siguientes cambios:

  • Eliminar exit();
  • Puedes usar wp_redirect para redirigir a la misma página. Al redirigir, si un usuario actualiza la página no intentará realizar nuevamente la eliminación.

Nota: No he realizado ninguna verificación de nonce o permisos. Realmente deberías hacer esto. Lo último es un simple chequeo con current_user_can. Cómo hagas lo primero dependerá del método, pero te animo a leer esto.

Esta pregunta es ampliamente similar y podría ayudar:

12 mar 2012 13:47:46
Comentarios

¿Cómo se vería el código php/html en la plantilla de la página real para el método ajax?

jetlej jetlej
12 mar 2012 19:27:37