You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress自定义文章类型权限控制:如何排除管理员/编辑角色?

解决WordPress自定义文章类型History的访问权限跳转问题

直接给你修改后的代码,核心是在原有逻辑基础上,增加对管理员(Admin)和编辑(Editor)角色的权限判断,让这两类角色不受跳转限制:

add_action('template_redirect', 'restrict_history_post_access');
function restrict_history_post_access() {
    // 仅针对History类型的单篇文章生效
    if (is_singular('History')) {
        global $post;
        $current_user = wp_get_current_user();
        
        // 管理员或编辑直接跳过限制,不执行后续逻辑
        if (current_user_can('manage_options') || current_user_can('edit_others_posts')) {
            return;
        }
        
        // 未登录用户直接跳转
        if (!is_user_logged_in()) {
            wp_redirect(home_url('/指定跳转页面的slug/'));
            exit;
        }
        
        // 已登录但不是文章作者的用户执行跳转
        if ($current_user->ID !== $post->post_author) {
            wp_redirect(home_url('/指定跳转页面的slug/'));
            exit;
        }
    }
}

关键逻辑说明:

  • 钩子选择:用template_redirect是因为它在WordPress加载模板前触发,不会出现页面先加载再跳转的冗余问题,适合做权限跳转控制。
  • 角色判定依据:
    • current_user_can('manage_options'):管理员角色默认拥有该核心权限,用它判断用户是否为管理员比直接检查角色更灵活(避免自定义角色权限冲突)。
    • current_user_can('edit_others_posts'):编辑角色默认拥有编辑他人文章的权限,以此判断是否为编辑角色。
  • 优先级处理:先检查管理员/编辑权限,符合条件直接终止函数,确保这两类角色不受任何跳转限制。
  • 替换提示:把代码里的/指定跳转页面的slug/改成你实际要跳转的页面路径,比如/unauthorized-access/。

额外注意:

  • 确认自定义文章类型的slug是History(大小写敏感,和你创建时的设置一致),如果是小写history,要同步修改代码里的is_singular参数。
  • 代码可以放到当前主题的functions.php文件,或者自定义插件中。

内容的提问来源于stack exchange,提问作者Antonely93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:15:59