Удаление пользователей с фронтенда с помощью wp_delete_user()
Я хочу, чтобы администраторы могли удалять пользователей с фронтенда по нажатию кнопки. Как я могу использовать функцию wp_delete_user() для создания такой кнопки на фронтенде, если предоставлен ID пользователя?

В вышеприведенном ответе есть ошибка и упущение (непонятно, почему там 4 проверки)
int_val
— это не функция WordPress, тогда какintval
является функцией WordPress- Необходимо добавить
include("./wp-admin/includes/user.php" )
для вызоваwp_delete_user
Я хотел удалить пользователей без перехода в административную панель — вот рабочий код:
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" );
// проверка прав администратора.
if (current_user_can('edit_users')) {
$user_id = intval($_REQUEST['user_id']);
wp_delete_user($user_id);
exit();
}
}
}
Действие выполняется при отправке этого запроса:
http://website.com/?action=prefix_delete_user&user_id=<ID>
Добавьте этот код в ваш файл functions.php

Вы можете использовать AJAX для запроса пользовательского 'action' и отправки ID пользователя. Альтернативно, можно отправить 'action' и ID пользователя методом 'post' на ту же страницу. Оба метода по сути одинаковы, но первый не требует перезагрузки страницы.
На этом сайте есть множество тем, посвященных AJAX, поэтому я опущу детали (ознакомьтесь с тегом ajax для получения дополнительной информации).
В любом случае, вам нужно установить 'action' в 'myprefix_delete_user', а 'user_id' в ID соответствующего пользователя.
Метод с использованием AJAX
Отправка AJAX-запроса с 'action' 'myprefix_delete_user' вызовет следующие хуки:
wp_ajax_myprefix_delete_user
- если пользователь авторизованwp_ajax_nopriv_myprefix_delete_user
- если пользователь не авторизован
Мы хотим выполнить действие только для авторизованных пользователей, поэтому привязываем callback только к первому хуку:
add_action('wp_ajax_myprefix_delete_user','myprefix_delete_user_cb');
function myprefix_delete_user_cb(){
// На этом этапе следует проверить nonce и права пользователя.
$user_id = int_val($_REQUEST['user_id']);
wp_delete_user($user_id);
exit();
}
Метод 'POST/GET'
(не был уверен, как назвать этот метод...). Работает примерно так же. Вы снова отправляете переменные 'action' и 'user_id'. Это можно сделать, создав ссылку:
$user_id=9 // ID пользователя для удаления.
$url = add_query_arg(array('action'=>'myprefix_delete_user', 'user_id'=>$user_id));
echo "<a href='".$url. "'>Удалить пользователя</a>";
Это 'отправляет' (не совсем) данные на текущую страницу. Затем, если 'action' установлен, подключаемся к хуку 'init
':
if(isset($_REQUEST['action']) && $_REQUEST['action']=='myprefix_delete_user')
add_action('init','myprefix_delete_user_cb');
Можно использовать ту же callback-функцию, но с изменениями:
- Удалить
exit();
- Можно использовать
wp_redirect
для перенаправления на ту же страницу. Это предотвратит повторное выполнение удаления при обновлении страницы.
Обратите внимание, я не выполнял проверку nonce или прав пользователя. Это действительно стоит сделать. Для проверки прав можно использовать простой вызов current_user_can
. Способ проверки nonce зависит от выбранного метода, но я рекомендую ознакомиться с этим материалом.
Следующий вопрос имеет схожую тематику и может быть полезен:
