Удаление пользователей с фронтенда с помощью wp_delete_user()

12 мар. 2012 г., 00:29:34
Просмотры: 13.5K
Голосов: 3

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

0
Все ответы на вопрос 2
1

В вышеприведенном ответе есть ошибка и упущение (непонятно, почему там 4 проверки)

  1. int_val — это не функция WordPress, тогда как intval является функцией WordPress
  2. Необходимо добавить 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

25 июл. 2015 г. 01:33:25
Комментарии

Для работы функции wp_delete_user не требуется включать какие-либо файлы.

jetlej jetlej
1 авг. 2015 г. 03:11:22
1

Вы можете использовать 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 зависит от выбранного метода, но я рекомендую ознакомиться с этим материалом.

Следующий вопрос имеет схожую тематику и может быть полезен:

12 мар. 2012 г. 13:47:46
Комментарии

Как будет выглядеть php/html код на реальном шаблоне страницы для ajax метода?

jetlej jetlej
12 мар. 2012 г. 19:27:37