Eliminar usuarios desde el frontend con wp_delete_user()
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?

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

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 logeadowp_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:
