非管理员角色无法删除自定义文章问题求助
问题排查与解决
核心原因:自定义文章类型的权限不匹配
你的按钮文字是「Delete Custom Scanner」,说明这是自定义文章类型(Custom Post Type)(假设其slug为scanner)。WordPress中自定义文章类型的权限是和其capability_type绑定的,而非通用的delete_posts/delete_published_posts——这两个权限仅对默认的post类型生效,对自定义文章类型无效。
具体逻辑分析
get_delete_post_link()函数内部会触发权限检查:current_user_can('delete_post', $post->ID)。这个检查会根据文章类型自动映射到对应的权限:
- 对默认
post类型,映射到delete_posts权限 - 对自定义
scanner类型,映射到delete_scanners权限(如果注册时capability_type设为scanner)
如果你的自定义角色(trial、member)没有被授予对应自定义文章类型的删除权限,这个检查会直接失败,WordPress就会跳转到首页拦截操作。
修复步骤
确认自定义文章类型的注册配置
检查你注册scanner类型的代码,必须确保开启了权限映射:register_post_type( 'scanner', array( // ...其他配置项 'capability_type' => 'scanner', 'map_meta_cap' => true, // 关键:必须开启才能正确映射权限 ) );为自定义角色添加对应权限
给trial、member角色添加自定义文章类型的删除权限,示例代码如下(可放到主题functions.php或自定义插件中执行一次,之后可移除):// 为member角色添加权限 $member_role = get_role( 'member' ); $member_role->add_cap( 'delete_scanners' ); $member_role->add_cap( 'delete_published_scanners' ); // 为trial角色添加权限 $trial_role = get_role( 'trial' ); $trial_role->add_cap( 'delete_scanners' ); $trial_role->add_cap( 'delete_published_scanners' );验证权限生效
在模板中可以临时添加测试代码,确认当前用户是否拥有权限:<?php var_dump(current_user_can('delete_scanners', $post->ID)); ?>如果输出
bool(true),说明权限配置正确。
内容的提问来源于stack exchange,提问作者willbeing
相关产品推荐
相关产品推荐

