Удалить пользователя и все его сообщения - PullRequest
2 голосов
/ 27 мая 2019

Мне нужно использовать WordPress Rest API для удаления пользователя и всех его собственных (возможно, пользовательских) сообщений.

Я попытался позвонить <url_base>/wp/v2/users/<id>, и я должен предоставить дополнительный параметр ?reassign=USER_ID, чтобы переназначить его сообщения другому пользователю.

Глупым решением должно быть добавление «мусорного» пользователя в систему и назначение ему всех удаленных сообщений. Тогда я могу создать работу, чтобы удалить все сообщения. Мне кажется, это очень глупый путь ..: (

Я просто хочу их удалить. Я могу сделать это из панели администратора WP ... почему я не могу через Rest Api?

Спасибо

EDIT Передавая «переназначить» как пустые параметры (ноль не принимается ...), API сообщает мне, что я не могу удалить свой собственный профиль. Я тестирую его как подписчик (конечный пользователь), но мне нужно иметь возможность управлять и удалять свои собственные данные ... Я ошибаюсь ?!

1 Ответ

0 голосов
/ 28 мая 2019

Это мое решение ... может быть, не самое лучшее, но, похоже, оно работает.

Я добавил delete_users и remove_users возможности для роли подписчика.(для моего удобства).

Проверка конечной точки отдыха My / DeleteUsers для идентификатора пользователя, зашифрованного в маркере JWT, отправляемом в заголовке, и сравнение его с параметрами user_id.Если они совпадают, я могу удалить пользователя.

Теперь мне просто нужно избегать того, чтобы пользователь мог получить доступ к панели администратора WP и напутать!

Это код:

function myDeleteProfile($data) {
  require_once(ABSPATH.'wp-admin/includes/user.php');

  $headers = getallheaders();
  if(!isset($headers['Authorization']) || !$headers['Authorization']) {
    return array('esito'=>'ko', 'descrizione'=>'Fail message!');
  }

  $jwt_parts = preg_split('/\./', $headers['Authorization']);
  $jwt_decoded = json_decode(base64_decode($jwt_parts[1]));
  $jwt_user = $jwt_decoded->data->user->id; 

  if( intval($data['user_id']) != intval($jwt_user) ) { 
    return array('esito'=>'ko', 'descrizione'=>'User cannot delete.');
  }
  else { 
    if( wp_delete_user($jwt_user,null) ){
        return array('esito'=>'ok', 'descrizione'=>'Deleting...');
    } 
    else {
        return array('esito'=>'ko', 'descrizione'=>'Error.'); 
    }
  } 
}
...