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

WordPress自定义REST API端点获取主题返回结果异常求助

排查自定义REST主题列表端点的JSON返回问题

我来帮你搞定这个问题——你的API返回结果不符合预期,核心原因是直接返回了wp_get_themes()生成的WP_Theme对象数组。WordPress的REST API在序列化对象时,只能处理公共属性,而WP_Theme里的大部分关键数据都是受保护/私有属性,没法直接转成JSON,所以返回的结果会缺失信息或者格式混乱。

修复方案:提取可序列化的主题数据

我们需要遍历每个主题对象,用WP_Theme提供的公共方法提取需要的信息,转换成普通数组后再返回。修改后的完整代码如下:

add_action( 'rest_api_init', function () { 
    // 注册REST端点
    register_rest_route( 'theme/v1', '/get_theme_list/', array( 
        'methods' => 'GET', 
        'callback' => 'theme_list_function' 
    ) ); 
} ); 

// 获取并处理主题列表的回调函数
function theme_list_function(){ 
    // 获取所有主题的WP_Theme对象集合
    $raw_themes = wp_get_themes(); 
    $processed_themes = array();

    // 遍历每个主题,提取可序列化的关键数据
    foreach($raw_themes as $slug => $theme){
        $processed_themes[] = array(
            'slug' => $slug,
            'name' => $theme->get('Name'),
            'version' => $theme->get('Version'),
            'author' => $theme->get('Author'),
            'description' => $theme->get('Description'),
            'screenshot_url' => $theme->get_screenshot(),
            'theme_url' => $theme->get('ThemeURI'),
            'author_url' => $theme->get('AuthorURI')
        );
    }

    // 返回符合REST规范的响应
    return rest_ensure_response($processed_themes);
}

关键改进点说明

  • 提取对象数据:用$theme->get()方法获取主题元数据(比如名称、版本),这些方法会返回可直接序列化的字符串/数值,避免了直接访问对象私有属性的问题。
  • 使用rest_ensure_response():这个函数会把普通数组包装成标准的WP_REST_Response对象,确保WordPress能正确生成符合规范的JSON响应。
  • 可选:添加权限控制:如果不想让所有人都访问这个端点,可以给路由添加权限回调,比如只允许管理员查看:
    register_rest_route( 'theme/v1', '/get_theme_list/', array( 
        'methods' => 'GET', 
        'callback' => 'theme_list_function',
        'permission_callback' => function(){
            return current_user_can('manage_options');
        }
    ) );
    

原代码的问题根源

wp_get_themes()返回的是WP_Theme类的实例集合,这些对象内部的核心属性(比如主题名称、版本)都是受保护的,JSON序列化器无法读取这些属性,所以返回的结果会是空对象或者缺失关键信息。通过提取公共方法返回的数值,就能得到结构清晰、符合预期的JSON数据了。

内容的提问来源于stack exchange,提问作者Krishna Ballabh Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:39:02