WordPress4.7版本及以后都默认开启了rest api,这个东西在方便我们制作各种客户端的同时,也让我们的网站数据暴露出来。比如某些采集器通过wp rest api采集文章内容更加方便,虽然显示在网页中也一样会被采集。为了避免这个问题,很多没有使用到wp rest api接口的站长就选择关闭这个接口。其实,在开启的情况下应该是可以筛选用户权限的。为了更好的操纵这个接口,下面分享几个控制 wp rest api的过滤器钩子。
发送api请求时触发
复制
do_action( 'rest_api_init', WP_REST_Server $wp_rest_server )
使用实例,禁止未登录用户使用WordPress rest api:
复制
/*禁用未登录的用户*/ add_filter( 'rest_api_init', 'rest_only_for_authorized_users', 99 ); function rest_only_for_authorized_users($wp_rest_server){ if ( !is_user_logged_in() ) { wp_die('非法操作!'); } }
移除api请求端点
复制
apply_filters( 'rest_endpoints', array $endpoints )
使用实例,移除部分user用户端点:
复制
add_filter( 'rest_endpoints', function( $endpoints ){ if ( isset( $endpoints['/wp/v2/users'] ) ) { unset( $endpoints['/wp/v2/users'] ); } if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) { unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ); } return $endpoints; });
这些端点可以在wp rest api源码中看到。
移除整个wp rest api接口
复制
add_action(' plugins_loaded ',function(){
remove_filter(' rest_api_init ',' create_initial_rest_routes ');
});
从这段代码来看,rest api是以插件的形式被WordPress加载的,移除api端点没有测试过是否有效,大家有兴趣自行测试。
评论 (3)