当我们向注册rest路由时register_rest_route()
, 然后我们可以使用permission_callback
具有所需权限类型的参数。
例如,检查如何WP_REST_Posts_Controller::register_routes()
和WP_REST_Users_Controller::register_routes()
实现权限回调。
您所指的密码参数是内容的密码,您可以为每篇文章设置密码,但密码不同。
但由于您希望以现有路线为目标,例如:
/wp/v2/cards
/wp/v2/cards/(?P<id>[\\d]+)
/wp/v2/cards/...possibly some other patterns...
你可以试试,例如
rest_dispatch_request
筛选以设置这些类型路由的附加权限检查。
Here\'s a demo plugin:
add_filter( \'rest_dispatch_request\', function( $dispatch_result, $request, $route, $hndlr )
{
$target_base = \'/wp/v2/cards\'; // Edit to your needs
$pattern1 = untrailingslashit( $target_base ); // e.g. /wp/v2/cards
$pattern2 = trailingslashit( $target_base ); // e.g. /wp/v2/cards/
// Target only /wp/v2/cards and /wp/v2/cards/*
if( $pattern1 !== $route && $pattern2 !== substr( $route, 0, strlen( $pattern2 ) ) )
return $dispatch_result;
// Additional permission check
if( is_user_logged_in() ) // or e.g. current_user_can( \'manage_options\' )
return $dispatch_result;
// Target GET method
if( WP_REST_Server::READABLE !== $request->get_method() )
return $dispatch_result;
return new \\WP_Error(
\'rest_forbidden\',
esc_html__( \'Sorry, you are not allowed to do that.\', \'wpse\' ),
[ \'status\' => 403 ]
);
}, 10, 4 );
我们的目标是
/wp/v2/cards
和
/wp/v2/cards/*
获取路由,并进行其他用户权限检查。
使用WordPress cookie身份验证进行调试时,我们可以直接使用以下工具进行测试:
https://example.tld/wp-json/wp/v2/cards?_wpnonce=9467a0bf9c
其中nonce部分是从
wp_create_nonce( \'wp_rest\' );
希望这有帮助!