WordPress Rest API删除帖子时,添加自定义过滤器rest_{$this->post_type}_deletable
2022-04-04
WordPress Rest API创建/修改/查询帖子(posts),均有过滤器,唯独没有删除操作的过滤器。
添加自定义过滤器很简单,拓展删除方法delete_item:
/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
public function delete_item( $request ) {
// ...
$prepared_check_delete = apply_filters( "rest_{$this->post_type}_deletable", $post, $request );
if ( is_wp_error( $prepared_check_delete ) ) {
return $prepared_check_delete;
}
// ...
}
WordPress中post(文章)、page(页面)和attachment(附件)是一类对象,存取操作大同小异。如此,这里会产生三个过滤器:
rest_post_deletable
rest_page_deletable
rest_attachment_deletable
系统自带的其他六组过滤器:WordPress Rest API操作文章/媒体库的过滤器列表,灵活控制用户权限。
实际使用:
add_filter( 'rest_post_deletable', 'custom_rest_post_deletable', 10, 2);
function custom_rest_post_deletable( $post, $request ) {
// 自定义判断条件 $flag
$flag = true;
if ($flag) return $post;
return new WP_Error(
'rest_cannot_delete',
__( 'Sorry, you are not allowed to delete this post.' ),
array( 'status' => rest_authorization_required_code() )
);
}
切记:此方法需要修改内核文件,一定要谨慎选择。不到万不得已的情况下,一般不要修改内核。
(版权归cpury.com所有,转载请注明出处。)