阻止用户访问 REST API 端点,同时仍从中获取数据

Block users from REST API endpoint while still grabbing data from it

我创建了 2 个 REST API 端点来存储 CPT 数据及其自定义字段:

存档数据xyz.com/wp-json/wl/v2/businesses
单一业务数据xyz.com/wp-json/wl/v2/businesses/<ID>

这两个端点都已注册权限回调;

register_rest_route( 'wl/v2', '/businesses', array(
    'methods'   => WP_REST_Server::READABLE,
    'callback'  =>  'wl_businesses_posts',
    'permission_callback'   => '__return_true'
));

这是一个商业目录网站,其中每个 'business' 客户都有一个通用仪表板 (xyz.com/dashboard),并且此仪表板页面从 [=37] 中提取 'business' 的数据=]单一业务数据 REST API 上面的端点并填写页面上的输入字段。

还有一个可供未登录访问者访问的页面 ( xyz.com/business1 ),该页面对所有企业都是通用的,并且是一个只读页面,访问者可以在其中查看该企业的详细信息。此页面也从上面提到的 单一业务数据 REST API 端点提取数据。

我想要完成的是除了管理员之外没有人能够窥视 存档数据 单一业务数据 直接显示高 JSON 数据的端点,以避免窃取在该站点注册的所有企业的信息。但与此同时,我希望这些端点可以通过 wp_remote_retrieve_body( wp_remote_get( $url ) ); 代码访问以填充 仪表板 单一业务信息 页数。

我试过这段代码,但它显然也阻止了页面代码发出的在页面中提取和填充数据的请求。

add_filter( 'rest_authentication_errors', function( $result ) {
    if ( ! empty( $result ) ) {
      return $result;
    }
    if ( ! is_user_logged_in() ) {
      return new WP_Error( 'rest_not_logged_in', 'You are not currently logged in.', array( 'status' => 401 ) );
    }
    return $result;
  });

我不一定是在找代码,只是在寻找如何解决这个问题的方向。

----------------------------更新-------- ------------------
:
就像我说的,因为它是一个商业目录,即使是非登录用户也应该看到 CPT 的存档页面和单个商业页面。我最近了解了 register_rest_route 参数中的 'permission callbacks',那么我如何在 wp_remote_get 函数中传递自定义 'key' 参数并在权限回调中接收和验证它?

好的,我已经设法通过在请求中传递一个参数来保护我的端点,并且只有当它在其余端点的权限回调中匹配时,才会检索数据:

$userData = wp_remote_retrieve_body( wp_remote_get( $url,  array(
        'body' => array(
            'param' => '1'
        ),
        'sslverify' => false,
    )  ) );

并且在 register_rest_route:

'permission_callback'   => function( WP_REST_Request $request ) {
            if ( '1' == $request->get_param( 'param' ) ) {
           return true;
         } else {
       return false;
    }
 }

我很高兴我不必为此使用插件:D