WordPress:实现编辑仅见自身文章且不隐藏自定义字段的方法
问题分析与解决方法
你这段代码的问题在于:在后台对所有非管理员用户的所有查询都强制添加了author过滤,包括编辑/添加文章页面中加载自定义字段的查询——这些查询被限定为当前作者后,无法获取到需要的自定义字段数据,导致表单无法显示。
我们需要把作者过滤的范围限定在文章列表页面的主查询中,排除编辑/添加文章的场景,这样就能保留原有权限控制的同时,让自定义字段正常显示。
修改后的代码
add_shortcode('pledge_count', 'get_pledge_count'); add_filter( 'pre_get_posts', 'fb_pre_get_posts' ); function fb_pre_get_posts( $queryobj ) { // 仅针对后台的主查询进行处理 if ( is_admin() && $queryobj->is_main_query() ) { // 获取当前后台页面的详细信息 $screen = get_current_screen(); // 仅在文章列表页面(edit.php)、且用户不是管理员时,应用作者过滤 if ( $screen && $screen->base === 'edit' && $screen->post_type === 'post' && !current_user_can( 'edit_users' ) ) { $queryobj->set( 'author', get_current_user_id() ); } } return $queryobj; }
关键调整说明
- 新增
$queryobj->is_main_query():确保只修改文章列表的主查询,不会影响自定义字段这类子查询的执行 - 通过
get_current_screen()精准判断页面:只有在文章列表页($screen->base === 'edit'且文章类型为post)才触发作者过滤,编辑/添加文章的页面(页面base为post)会跳过这个逻辑,自定义字段的查询就能正常加载 - 使用
$queryobj->set('author', ...)替代直接修改query_vars:这是WordPress官方推荐的规范写法,避免潜在的查询冲突
内容的提问来源于stack exchange,提问作者Mahmoud Ofeisa
相关产品推荐
相关产品推荐

