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');
代码说明
- 场景精准限定:通过
is_admin() && $pagenow === 'edit.php' && $query->is_main_query()确保过滤只在后台文章列表的主查询中生效,避免干扰其他功能。 - 角色精准匹配:用
in_array('editor', $current_user->roles)明确只针对编辑器角色,管理员账号不受限制,符合需求。 - 简化用户数据获取:用
wp_get_current_user()替代全局$user_ID和get_userdata(),写法更简洁安全。 - 移除冗余参数:如果没有特殊的截止日期需求,只保留
after即可,让逻辑更清晰。
测试验证
登录你的编辑器账号,进入后台文章列表页,应该只能看到该账号注册日期之后发布的文章了;管理员账号登录则不受限制,能正常查看所有文章。
内容的提问来源于stack exchange,提问作者Arun PushpavalliSivasamy
相关产品推荐
相关产品推荐

