WordPress Rest API操作文章/媒体库的过滤器列表,灵活控制用户权限
2022-04-04
WordPress Rest API操作文章/媒体库,系统自带六组过滤器,内核文件位置:
/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
// 当通过REST API查询帖子时,过滤WP Query参数。
`rest_post_query`
`rest_page_query`
`rest_attachment_query`
// 在通过REST API创建或更新单个帖子后触发。
`rest_insert_post`
`rest_insert_page`
`rest_insert_attachment`
// 在通过REST API完全创建或更新单个帖子后触发。
`rest_after_insert_post`
`rest_after_insert_page`
`rest_after_insert_attachment`
// 过滤一个帖子是否可丢弃。
`rest_post_trashable`
`rest_page_trashable`
`rest_attachment_trashable`
// 在通过REST API插入帖子之前对其进行筛选。
`rest_pre_insert_post`
`rest_pre_insert_page`
`rest_pre_insert_attachment`
// 为REST API响应过滤发布数据。
`rest_prepare_post`
`rest_prepare_page`
`rest_prepare_attachment`
过滤器的作用非常大,举个简单例子,给查询API添加额外参数,如用户id:
add_filter( 'rest_post_query', 'custom_rest_post_query', 10, 2 );
function custom_rest_post_query( $args, $request ) {
$user_id = get_current_user_id();
$args['author'] = $user_id;
return $args;
}
笔者的主要应用场景是,除了WordPress自带的用户权限系统,拓展了新的用户管理概念,类似用户分组。在处理业务逻辑时,使用过滤器加入自定义门槛,进一步控制用户权限。
add_filter( 'rest_pre_insert_post', 'custom_rest_pre_insert_post', 10, 2 );
function custom_rest_pre_insert_post( $prepared_post, $request ) {
$user_id = get_current_user_id();
// 自定义逻辑 begin
$flag = $user_id >= 1000;
// 自定义逻辑 end
if (flag) return $prepared_post;
return new WP_Error(
'rest_cannot_edit',
__( 'Sorry, you are not allowed to edit this post.' ),
array( 'status' => rest_authorization_required_code() )
);
}
(版权归cpury.com所有,转载请注明出处。)