我需要使用WordPress Rest API删除用户及其所有(也许是自定义的)帖子。
我尝试调用<url_base>/wp/v2/users/<id>
,并且必须提供其他参数?reassign=USER_ID
才能将其帖子重新分配给其他用户。
一个愚蠢的解决方案应该是向系统添加“垃圾”用户,并为他分配所有已删除的帖子。然后,我可以创建一个作业来删除所有帖子。对我来说,这似乎是一种非常愚蠢的方式..:(
我只想删除它们。我可以从WP管理面板执行此操作...为什么我不能通过Rest Api?
谢谢
编辑 API将“重新分配”作为空参数传递(不接受null ...),该API通知我无法删除自己的个人资料。我正在以订户(最终用户)的身份对其进行测试,但是我需要能够管理和删除自己的数据...我错了吗?
答案 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.');
}
}
}