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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:40:30