WordPress REST API根据meta_key获取全状态文章(已发布、草稿等)
2022-01-30
WordPress REST API获取文章内容,通常是用id去请求数据,但id相对比较敏感,不太适合直接暴露给用户。
如此,推荐自定义字段meta_value来获取文章,只需要在rest_post_query中添加新的过滤器即可,具体实现方法:
WordPress Rest API通过元数据meta获取文章列表posts
遗憾的是这种方式只能获取publish类型的文章,意思就是说目标文章必须是【已发布】状态时,才能正确返回。
(也许有高级配置能实现获取全状态的文章,时间原因,没有进一步研究。)
另一种方式是自定义REAT API,添加新的路由,逻辑完全可控,想获取什么信息畅通无阻,前提是保证安全性。
#-----------------------------------------------------------------#
# REST-API自定义路由
#-----------------------------------------------------------------#
add_action( 'rest_api_init', 'cpury_rest_register_route' );
function cpury_rest_register_route() {
register_rest_route( 'cpury/v1', 'metas/(?P<id>[a-zA-Z0-9-]+)', [
'methods' => 'GET',
'callback' => 'cpury_rest_base_cb'
] );
}
#-----------------------------------------------------------------#
# REST-API 根据meta 获取文章内容
#-----------------------------------------------------------------#
function cpury_rest_base_cb($request) {
// 接收meta_value
$params = $request->get_params();
$meta_value = $params['id'];
// 查询postmeta表,获取文章id
global $wpdb;
$real_post_id = $wpdb->get_var( "SELECT post_id FROM $wpdb->postmeta WHERE meta_value = '$meta_value'" );
// 根据文章id,获取实体
$target_post = get_post($real_post_id);
$out = array(
'code' => 0,
'data' => array(
'content' => $target_post->post_content,
'id' => (int)$post_id
)
);
return $out;
}
调用api:
/wp-json/cpury/v1/metas/xxxxxxxx
逻辑其实很简单:
- 添加新api
- 根据meta_value获取post_id
- 再根据post_id获取post_content
自定义路由方式自由度非常高,自然不限于文章状态,获取草稿肯定不在话下。
附
WordPress文章自定义字段postmeta一般有两种方式。
第一,代码方式:register_meta,传入字段名和meta类型。
$object_type = 'post';
$meta_args_uuid = array( // Validate and sanitize the meta value.
// Note: currently (4.7) one of 'string', 'boolean', 'integer',
// 'number' must be used as 'type'. The default is 'string'.
'type' => 'string',
// Shown in the schema for the meta key.
'description' => 'uuid description',
// Return a single value of the type.
'single' => true,
// Show in the WP REST API response. Default: false.
'show_in_rest' => true,
);
register_meta( $object_type, 'uuid', $meta_args_uuid );
第二,可视化方式,在文章编辑器设置中打开自定义字段,以新版古腾堡编辑器为例,如图:
刷新页面后,底部栏便会出现控制meta的区块。
(版权归cpury.com所有,转载请注明出处。)