如何阻止除我自定义之外的所有rest API端点?

时间:2021-07-07 作者:Nimalaa

我已经写了一个自定义终点。我要阻止其他所有端点。我该怎么做?

1 个回复
SO网友:Paul G.

您可以;“块”;只需将其从REST服务器中删除即可。

WP为REST API端点提供了一个过滤器,您只需使用路由对其进行过滤即可。下面是一个简单的PHP类,可以为您实现这一点。您所需要做的就是提供路由数组。我添加了一些示例。

基本上,如果任何API路由包含$my_custom_routes 数组,它们将被保留。否则,它们将被丢弃,不再可用。

将其放置在REST API启动之前加载的位置,例如functions.php.

class Filter_Rest_Api_Endpoints {

    private $my_routes;

    public function __construct( $routes ) {
        $this->my_routes = $routes;
        add_filter( \'rest_endpoints\', array( $this, \'run_filter\' ) );
    }

    public function run_filter( $endpoints ) {

        foreach ( $endpoints as $route => $endpoint ) {
            $keep_route = false;

            foreach ( $this->my_routes as $my_route ) {

                if ( strpos( $route, $my_route ) !== false ) {
                    $keep_route = true;
                    break;
                }
            }

            if ( !$keep_route ) {
                unset( $endpoints[ $route ] );
            }
        }

        return $endpoints;
    }
}

function hook_my_api_routes_filter() {
    $my_custom_routes = array(
        \'users\',
        \'/my/v1/custom/route/1\',
        \'/my/v1/custom/route/2\'
    );
    new Filter_Rest_Api_Endpoints( $my_custom_routes );
}
add_action( \'rest_api_init\', \'hook_my_api_routes_filter\' );
当然,不建议这样做,因为您可能会破坏网站其他部分的正常功能,但如果您需要,可以在这里使用。