WordPress需要提供了REST API,但是有时候并不能完全满足我们的需求,比如他会把文章里好多我们用不到的数据显示出来,同时还不能显示自定义字段的数据,那么这个时候我们就需要对WordPress REST API的输出数据做定制化的修改和调整。
文章数据(posts)禁止某些字段显示
默认的,当请求类似 your-site.com/wp-json/wp/v2/posts?per_page=5&page=1
的接口来获取文章列表,展示的不少字段对一般人来说是没有必要。
秉承“如无必要,勿增实体”的原则,减少请求时候的数据量,可以通过下面的代码移除:
// https://devework.com/wordpress-rest-api-dynamic-output.html
function dw_rest_prepare_post( $data, $post, $request ) {
$_data = $data->data;
$params = $request->get_params();
// if ( ! isset( $params['id'] ) ) {
unset( $_data['excerpt'] );
unset( $_data['author'] );
unset( $_data['featured_media'] );
unset( $_data['format'] );
unset( $_data['ping_status'] );
unset( $_data['comment_status'] );
unset( $_data['sticky'] );
unset( $_data['template'] );
// }
$data->data = $_data;
return $data;
}
add_filter( 'rest_prepare_post', 'dw_rest_prepare_post', 10, 3 );
文章数据(posts)中输出 post meta 所有字段
可能考虑到数据隐私,文章数据(posts)默认并不显示post meta的相关字段,如果你需要输出对应文章下所有 post meta 字段,可以用下面的代码启用:
// https://devework.com/wordpress-rest-api-dynamic-output.html
register_rest_field( 'post', 'metadata', array(
'get_callback' => function ( $data ) {
return get_post_meta( $data['id'], '', '' );
}, ));
输出 post meta 特定字段
接上,如果你在REST API 中仅仅想输出 post meta 特定字段而非全部,则通过类似下面代码:
// https://devework.com/wordpress-rest-api-dynamic-output.html
function dw_rest_prepare_post( $data, $post, $request ) {
$_data = $data->data;
$params = $request->get_params();
$thumb = get_post_meta( $post->ID, 'thumb' );
if($thumb){
$_data['thumb_image'] = $thumb;
}
$data->data = $_data;
return $data;
}
add_filter( 'rest_prepare_post', 'dw_rest_prepare_post', 10, 3 );
上面的代码展示的是如何输出thumb
这个 post meta 字段,请按需使用。
借助 Nginx 控制 /wp-json 的访问
这个倒与WordPress 本身无关了,your-site.com/wp-json
的路由默认是所有人皆可访问。如果你基于服务器负载,或安全等方面考虑选择性输出,可以借助 Nginx 控制访问。先看下面的例子:
# https://devework.com/wordpress-rest-api-dynamic-output.html
location /wp-json {
if ($http_user_agent !~ '(iPhone|Android)'){
return 403;
}
try_files $uri $uri/ /index.php?$args;
}
如果你熟悉Nginx 语法,就知道上面的代码实现了:除了iOS 跟Android 设备(通过判断请求头的UA 信息),其它访问 /wp-json
的路径均返回403 状态码。这在一定程度上起到了保护作用。
遵循类似的思路,也可以通过自定义http 请求头的方式,如:
if ($http_x_access_token != 'your-token'){ return 403; }
以上主要内容引自:https://devework.com/wordpress-rest-api-dynamic-output.html
WordPress日记主要承接WordPress主题定制开发、PSD转WordPress、WordPress仿站以及以WordPress为管理后端的小程序、APP,我们一直秉持“做一个项目,交一个朋友”的理念,希望您是我们下一个朋友。如果您有WordPress主题开发需求,可随时联系QQ:919985494
相关文章
WordPress外观下不显示或只显示一个主题的解决方法
前两天一个老客户打电话找我给他做售后服务,他的网站出现了手机…如何将WordPress降级到以前的版本?
您想知道如何将WordPress降级到以前的版本吗?Word…WordPress微信分享文章或页面时如何带上图片和摘要
平时我们在WordPress主题定制开发的时候经常会用到社交…如何更改WordPress特色图片大小?
您想知道如何更改WordPress特色图像大小吗? 特色图像…WordPress如何创建自定义文章类型
WordPress 里面内置了两种常用的 Post Type…到底该不该继续坚持使用WordPress创建网站?
前两天微信上一个陌生人添加我为好友,说他是做程序外包的,想让…