REST API¶
Base classes for registering WordPress REST API endpoints in a structured way.
RouteController¶
Barberklingen\BasePlugin\REST\RouteController
Abstract base class. Implement getRestRouteSchemas() to declare endpoints:
use Barberklingen\BasePlugin\REST\RouteController;
use Barberklingen\BasePlugin\REST\RouteSchema;
class MyRestController extends RouteController {
public function getRestRouteSchemas(): array {
return [
new RouteSchema(
namespace: 'my-plugin/v1',
path: '/widgets',
route_args: [
'methods' => 'GET',
'callback' => [$this, 'list_widgets'],
'permission_callback' => [$this, 'can_read'],
]
),
new RouteSchema(
namespace: 'my-plugin/v1',
path: '/widgets',
route_args: [
'methods' => 'POST',
'callback' => [$this, 'create_widget'],
'permission_callback' => [$this, 'can_write'],
]
),
];
}
public function list_widgets(\WP_REST_Request $request): \WP_REST_Response {
return new \WP_REST_Response(['widgets' => []], 200);
}
}
Register the controller inside a rest_api_init callback:
Built-in permission callbacks¶
RouteController ships three permission helpers:
| Method | Checks |
|---|---|
can_read() | Manager settings read capability |
can_write() | Manager settings edit capability |
can_delete() | Manager settings delete capability |
Override them or use your own permission_callback in the route args.
RestLoader¶
Barberklingen\BasePlugin\REST\RestLoader
Abstract loader class that wires up multiple controllers at once. Extend it to register a batch of controllers:
class MyRestLoader {
use \Barberklingen\BasePlugin\Traits\Module;
public function init(): void {
add_action('rest_api_init', [$this, 'load']);
}
protected function controllers(): array {
return [
new MyWidgetController(),
new MyProductController(),
];
}
}
MyRestLoader::get_instance();
RouteSchema¶
Barberklingen\BasePlugin\REST\RouteSchema
A value object grouping namespace, path, and route_args for a single route. RouteController::registerRoutes() iterates the schemas and calls register_rest_route() for each.