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

WordPress编辑器角色自定义:仅查看创建后文章的代码问题求助

解决WordPress编辑器仅查看注册后发布文章的问题

我来帮你排查下代码失效的原因,你的思路方向是对的,但几个逻辑细节没处理到位,咱们一步步修正:

原代码的问题点

  • 条件判断逻辑颠倒:原代码里的if($pagenow != 'edit.php' || $query->is_admin )会导致在后台编辑页时直接跳过过滤逻辑,完全搞反了我们需要的执行场景。
  • 权限判断范围太宽:current_user_can( 'edit_others_posts' )包含了管理员角色,如果你只想针对编辑器账号生效,这个判断会把管理员也限制住,不符合需求。
  • 缺少主查询判断:没有限定只修改主查询,可能会影响后台其他的文章查询(比如侧边栏统计、搜索结果等)。

修正后的代码

function posts_since_editor_created($query) { 
    global $pagenow; 

    // 仅在后台文章列表页的主查询中执行过滤
    if( !is_admin() || $pagenow !== 'edit.php' || !$query->is_main_query() ) {
        return $query;
    }

    // 获取当前用户对象
    $current_user = wp_get_current_user();
    // 仅针对编辑器角色生效,排除管理员
    if( in_array('editor', $current_user->roles) ) { 
        $registered_date = $current_user->user_registered;
        
        // 设置日期查询,仅显示注册日期之后发布的文章
        $query->set( 'date_query', [
            [
                'after'     => $registered_date,
                'inclusive' => true,
            ]
        ] );
    }

    return $query; 
} 
add_filter('pre_get_posts', 'posts_since_editor_created');

代码说明

  1. 场景精准限定:通过is_admin() && $pagenow === 'edit.php' && $query->is_main_query()确保过滤只在后台文章列表的主查询中生效,避免干扰其他功能。
  2. 角色精准匹配:用in_array('editor', $current_user->roles)明确只针对编辑器角色,管理员账号不受限制,符合需求。
  3. 简化用户数据获取:用wp_get_current_user()替代全局$user_ID和get_userdata(),写法更简洁安全。
  4. 移除冗余参数:如果没有特殊的截止日期需求,只保留after即可,让逻辑更清晰。

测试验证

登录你的编辑器账号,进入后台文章列表页,应该只能看到该账号注册日期之后发布的文章了;管理员账号登录则不受限制,能正常查看所有文章。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:58:48