WordPress REST API:如何获取事件日历的原始数据库内容?
获取自定义文章类型REST API的原始数据库数据
嘿,这个问题我之前也碰到过!WordPress默认的REST API会自动把内容经过the_content这类过滤器处理,所以返回的content.rendered是HTML格式的,但其实它已经给我们留了原始数据的入口,而且我们也可以自定义调整响应内容。
先看最简单的方法:用默认自带的原始字段
WordPress的WP_REST_Posts_Controller在返回文章内容时,content是一个包含两个属性的对象:
rendered:处理后的HTML内容,也就是你现在看到的raw:直接从数据库读取的原始未过滤内容
你打开你提供的API链接,查看每个event对象里的content.raw字段,就能拿到你要的原始数据库数据啦,完全不用额外改代码!
如果需要自定义响应结构(比如添加单独的原始字段)
要是你想把原始数据放在更显眼的位置,或者需要修改其他字段的返回值,可以用rest_prepare_{post_type}过滤器来调整。把这段代码加到你的functions.php里:
add_filter( 'rest_prepare_event', 'customize_event_rest_raw_data', 10, 2 ); function customize_event_rest_raw_data( $response, $post ) { // 添加一个单独的原始内容字段,名字可以自己改 $response->data['raw_content'] = $post->post_content; // 要是你想直接替换掉默认的HTML内容,改成返回原始数据,就用下面这行 // $response->data['content']['rendered'] = $post->post_content; // 如果你还有自定义元字段(比如活动日期、地点这类),也可以在这里添加原始值 // 比如获取名为event_date的自定义字段原始值: // $response->data['raw_event_date'] = get_post_meta( $post->ID, 'event_date', true ); return $response; }
针对自定义元字段的原始数据返回
如果你的event类型有自定义元字段,想要确保它们返回的是数据库里的原始值(而不是经过处理的),可以用register_rest_field来注册这些字段:
add_action( 'rest_api_init', 'register_event_raw_meta_fields' ); function register_event_raw_meta_fields() { // 注册event_date字段,返回原始值 register_rest_field( 'event', 'event_date', array( 'get_callback' => function( $post_data ) { return get_post_meta( $post_data['id'], 'event_date', true ); }, 'schema' => array( 'description' => '活动的原始日期数据', 'type' => 'string', ), ) ); // 可以继续添加其他自定义字段,比如event_location之类的 }
这样调整后,你就能完全控制REST API返回的原始数据啦!
内容的提问来源于stack exchange,提问作者ComCool
相关产品推荐
相关产品推荐

