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

使用WordPress REST API获取指定分类文章内容缺失求助

问题排查与解决方案

让我们一步步拆解并解决你的问题:

1. 核心问题:get_posts 参数使用不规范

你当前用的 'category' => $data['id'] 参数已经被 WordPress 弃用,虽然偶尔能工作,但容易引发不可预期的问题(比如获取到错误的文章、字段缺失)。官方推荐用 'cat' 参数来指定分类 ID,这是最稳妥的写法。

2. 内容字段为空的关键原因

直接调用 $post->post_content 可能拿到的是未渲染的原始内容(比如未解析的短代码、原始格式标签),甚至在某些上下文场景下会返回空值。正确的做法是用 WordPress 内置的内容过滤器 apply_filters('the_content', $post->post_content),它会帮你完成短代码解析、格式渲染等工作,输出最终可展示的文章内容。

3. Secret 验证逻辑存在漏洞

你通过解析 $_SERVER['QUERY_STRING'] 获取密钥的方式非常脆弱——如果请求里的查询参数顺序变化(比如新增其他参数),验证直接失效。应该利用 REST API 自带的参数验证机制来安全获取密钥。

修正后的完整代码

/* Register Route http://dev.mpblogg.se/wp-json/api/v1/feedposts/id */
add_action( 'rest_api_init', function () {
    register_rest_route( 'api/v1', '/feedposts/(?P<id>\d+)', array(
        'methods' => 'GET',
        'callback' => 'getAllPostsfromCategory',
        'args' => array(
            'secret' => array(
                'required' => true,
                'type' => 'string',
                'description' => '验证密钥'
            ),
        ),
    ));
});

/* Get all posts from the specific Category */
function getAllPostsfromCategory( $data ) {
    $secret = '2lpMh5EHaEiavhMONpWD';
    
    // 改用REST API参数获取密钥,逻辑更可靠
    if ( $data['secret'] !== $secret ) {
        return new WP_Error( 'invalid_secret', '无效的验证密钥', array( 'status' => 403 ) );
    }

    // 使用规范参数获取分类下所有已发布文章
    $posts = get_posts( array(
        'cat' => $data['id'],
        'posts_per_page' => -1, // 获取该分类下全部文章(默认只返回5篇)
        'post_status' => 'publish'
    ));

    $returnArray = array();
    foreach( $posts as $post ) {
        array_push( $returnArray, array(
            'id' => $post->ID,
            'title' => get_the_title( $post ), // 用官方函数获取标题更稳定
            'content' => apply_filters( 'the_content', $post->post_content ) // 渲染后的完整文章内容
        ));
    }

    return empty( $returnArray ) ? null : $returnArray;
}

额外优化建议

  • 别直接操作 $_SERVER 变量,REST API 的 $data 参数已经帮你安全封装了所有请求参数。
  • 返回 WP_Error 对象替代简单的 false,客户端能拿到明确的错误状态码(比如403)和提示信息,便于调试。
  • 用 posts_per_page => -1 确保获取分类下所有文章,避免默认只返回5篇的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:44:47