WordPress: REST API 接口自定义控制

当前位置: 首页 » 文章 » WordPress » WordPress: REST API 接口自定义控制

分类: WordPress 2,466阅读阅读模式

通过 www.yourdomain.com/wp-json/ 查看所有 API 端口

 

禁用未登录用户获取 API

  1. add_filter( 'rest_api_init', 'rest_only_for_authorized_users', 99 );
  2. function rest_only_for_authorized_users($wp_rest_server){
  3.     if ( !is_user_logged_in() ) {
  4.         wp_die('Illegal operation!');
  5.     }
  6. }

 

禁用部分 API 端点

如:禁用 users 相关

  1. add_filter( 'rest_endpoints', function( $endpoints ){
  2.     if ( isset( $endpoints['/wp/v2/users'] ) ) {
  3.         unset( $endpoints['/wp/v2/users'] );
  4.     }
  5.     if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
  6.         unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
  7.     }
  8.     return $endpoints;
  9. });

如:去除 oembed

  1. foreach ($endpoints as $key=>$value){
  2.     if(preg_match("/^(\/wp\/v2|\/oembed\/1.0|\/ft\/v1)/",$key)){
  3.         unset( $endpoints[$key] );
  4.     }
  5. }
  6. if ( isset( $endpoints['/'] ) ) {
  7.     unset( $endpoints['/'] );
  8. }

 

移除所有 API

  1. add_action(' plugins_loaded ',function(){
  2.     remove_filter(' rest_api_init ',' create_initial_rest_routes ');
  3. });

 

登录用户不移除 oembed

  1. add_filter( 'rest_endpoints', function( $endpoints ){
  2.     foreach ($endpoints as $key=>$value){
  3.         if(preg_match("/^(\/wp\/v2|\/oembed\/1.0|\/ft\/v1)/",$key) && defined(AUTH_KEY)){
  4.             unset( $endpoints[$key] );
  5.         }
  6.     }
  7.     if ( isset( $endpoints['/'] ) ) {
  8.         unset( $endpoints['/'] );
  9.     }
  10.     return $endpoints;
  11. });

 

注册添加新的 API 接口

  1. function da_rest_hello_callback() {
  2.   return 'hello new api';
  3. }
  4. function da_rest_register_route() {
  5.   register_rest_route( 'myapi/', 'hello', [
  6.     'methods'   => 'GET',
  7.     'callback'  => 'da_rest_hello_callback'
  8.   ] );
  9. }
  10. add_action( 'rest_api_init', 'da_rest_register_route');

通过访问 wp-json/myapi/hello ,则会出现hello new api

完整参考:https://ninghao.net/blog/5492

 

精简端口中的字段,如:精简 posts 中的一些template,ping_status...

  1. function da_rest_prepare_post( $data, $post, $request ) {
  2.   $_data = $data->data;
  3.   $params = $request->get_params();
  4.   unset( $_data['excerpt'] );
  5.   unset( $_data['author'] );
  6.   unset( $_data['featured_media'] );
  7.   unset( $_data['format'] );
  8.   unset( $_data['ping_status'] );
  9.   unset( $_data['comment_status'] );
  10.   unset( $_data['sticky'] );
  11.   unset( $_data['template'] );
  12.   $data->data = $_data;
  13.   return $data;
  14. }
  15. add_filter( 'rest_prepare_post', 'da_rest_prepare_post', 10, 3 );

 

找回隐藏的 posts meta 所有字段

  1. register_rest_field( 'post', 'metadata', array(
  2.   'get_callback' => function ( $data ) {
  3.     return get_post_meta( $data['id'], '', '' );
  4.   },
  5. ));

 

找回隐藏的 posts meta 部分字段,如 thumb_image

  1. function da_rest_prepare_post( $data, $post, $request ) {
  2.   $_data = $data->data;
  3.   $params = $request->get_params();
  4.   $thumb =  get_post_meta( $post->ID, 'thumb' );
  5.     if($thumb){
  6.       $_data['thumb_image'] = $thumb;
  7.     }
  8.   $data->data = $_data;
  9.   return $data;
  10. }
  11. add_filter( 'rest_prepare_post', 'da_rest_prepare_post', 10, 3 );

 

完全移除 REST API 并去除头部 wp-json 链接

  1. //屏蔽 REST API
  2. add_filter('json_enabled', '__return_false' );
  3. add_filter('json_jsonp_enabled', '__return_false' );
  4. add_filter('rest_enabled', '__return_false');
  5. add_filter('rest_jsonp_enabled', '__return_false');
  6. // 移除头部 wp-json 标签和 HTTP header 中的 link
  7. remove_action('wp_head', 'rest_output_link_wp_head', 10 );
  8. remove_action('template_redirect', 'rest_output_link_header', 11 );

 

完毕!

 

 

 

 

相关文章

评论一下

【注意1】:首次评论使用表情将会进入审核状态。
【注意2】:无意义回复、乱打文字内容将会进入审核状态。
【注意3】:涉及辱骂、色情、政治、毒品、赌博内容将会进入审核状态。
【注意】:首次评论使用表情将会进入审核状态。
暂无评论