删除用户及其所有帖子

时间:2019-05-27 09:58:58

标签: wordpress wordpress-rest-api

我需要使用WordPress Rest API删除用户及其所有(也许是自定义的)帖子。

我尝试调用<url_base>/wp/v2/users/<id>,并且必须提供其他参数?reassign=USER_ID才能将其帖子重新分配给其他用户。

一个愚蠢的解决方案应该是向系统添加“垃圾”用户,并为他分配所有已删除的帖子。然后,我可以创建一个作业来删除所有帖子。对我来说,这似乎是一种非常愚蠢的方式..:(

我只想删除它们。我可以从WP管理面板执行此操作...为什么我不能通过Rest Api?

谢谢

编辑 API将“重新分配”作为空参数传递(不接受null ...),该API通知我无法删除自己的个人资料。我正在以订户(最终用户)的身份对其进行测试,但是我需要能够管理和删除自己的数据...我错了吗?

1 个答案:

答案 0 :(得分:0)

这是我的解决方案...也许不是最好的解决方案,但似乎可行。

我为订阅者角色添加了 delete_users remove_users 功能(为方便起见)。

我的/ DeleteUsers休息端点检查在标头中发送的JWT令牌内加密的用户ID,并将其与user_id参数进行比较。如果它们匹配,我可以删除用户。

现在,我只需要避免用户可以访问WP Admin面板并造成混乱!

这是代码:

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.'); 
    }
  } 
}