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

如何通过WordPress钩子修改latest posts区块以展示待审核文章

问题原因

你之前写的pre_get_posts代码修改的是当前页面的主查询,主查询的作用是匹配你访问的「审核人员前端页」这个页面本身是否存在。你强制将主查询的post_status改为pending,而这个页面本身是已发布(publish)状态,主查询找不到匹配的页面内容,自然返回404错误——你修改的是页面本身的查询,和你要调整的latest posts区块内部的文章查询是完全独立的两个查询。

解决方案

WordPress为核心最新文章区块提供了专门的查询参数过滤器,直接修改区块的查询配置即可,不会影响页面主查询,也不需要修改核心文件:

// 将以下代码添加到主题的functions.php文件中
add_filter( 'block_core_latest_posts_query_args', function( $query_args, $block_attributes ) {
    // 替换name_of_the_page为你实际的页面别名
    if ( get_query_var('pagename') == 'name_of_the_page' && current_user_can('publish_posts') ) {
        $query_args['post_status'] = 'pending';
        // 如果需要限制指定分类,可取消注释下行,将5改为你需要的分类ID
        // $query_args['cat'] = 5;
    }
    return $query_args;
}, 10, 2 );

如果你的WordPress版本低于5.8,没有上述专用过滤器,可以使用通用区块预渲染钩子实现:

add_filter( 'pre_render_block', function( $pre_render, $parsed_block ) {
    if ( $parsed_block['blockName'] === 'core/latest-posts' 
         && get_query_var('pagename') == 'name_of_the_page' 
         && current_user_can('publish_posts') ) {
        $parsed_block['attrs']['postStatus'] = 'pending';
    }
    return $pre_render;
}, 10, 2 );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:04