首页 > 上网技巧 > 电脑小技巧 > WordPress用REST API避免微信小程序中数据加载...

WordPress用REST API避免微信小程序中数据加载超过长度限制

时间:2018-03-06 10:16 作者:QQ地带 我要评论

今天在开发小程序的过程中发现一个旧的项目在加载了几十条文章数据后,就再也无法继续加载了,微信开发工具中报错“invokeWebviewMethod 数据传输长度为 1957855 已经超过最大长度 1048576”
 
 
 
这是由于微信小程序规定页面的data对象最大只能装载1M的数据,而我的数据源都是很长的文章,在加载了50篇左右就超过1M了。显然用WordPress默认的REST API格式是无法突破这个瓶颈了。于是就要想办法修改API,在要加载大量文章的列表页中,把文章正文内容去掉,就能减少90%的数据量,反正列表页也不需要显示正文;只在文章详细页上加载当前文章的所有数据。
 
首先是去掉默认API的文章详细内容,并且删除掉一些觉得没用的字段:
 
 
function filter_post_json( $data, $post, $context ) {
$data->data['title']['rendered'] = html_entity_decode( $data->data['title']['rendered'] , ENT_NOQUOTES, 'UTF-8');
$data->data['content']['rendered'] = "";//在列表数据中去掉内容减少读取容量
 
//以下是删除某个字段
//unset( $data->data['featured_media'] );
return $data;
}
add_filter( 'rest_prepare_post', 'filter_post_json', 10, 3 );
如此以后,在https://[域名]/wp-json/wp/v2/posts/ 这样的列表节点上,数据量就小了很多;但是这样做,在 https://[域名]/wp-json/wp/v2/posts/123 这样的文章详情页节点上,也读取不到正文内容了。这里就要自己造一个新的URL,把文章所有内容都放到新的节点上。
 
这里我自定义了一个节点路径是foodieguild/v1/single-post/,通过参数id来获取详细的文章内容,输出到自己创建的JSON对象中:
 
 
//https://[域名]/wp-json/foodieguild/v1/single-post/?id=123
add_action( 'rest_api_init', function () {
register_rest_route( 'foodieguild/v1', '/single-post/', array(
'methods' => 'GET',
'callback' => 'brain1981_get_single_post',
) );
});
function brain1981_get_single_post($request){
$id = $request['id'];
$post = get_post($id);
$post->post_title = html_entity_decode( $post->post_title , ENT_NOQUOTES, 'UTF-8');
$post->post_content = apply_filters( 'the_content', $post->post_content );//加入rendered内容,防止小程序里面图片莫名错位
$post->post_content = html_entity_decode( $post->post_content , ENT_NOQUOTES, 'UTF-8');
 
class postClass{
var $post_id;
var $post_title;
var $post_content;
var $signature;
}
$postClass = new postClass();
$postClass->post_id = $id;
$postClass->post_title = $post->post_title;
$postClass->post_content = apply_filters( 'the_content', $post->post_content );
$postClass->signature = get_option('post-signature');//自定义的数据
 
return $postClass;
 
//如果希望返回原生的post对象格式,可以直接这样:
return $post;
}

标签: wordpress
顶一下
(0)
0%
踩一下
(0)
0%

Google提供的广告