Overview

Architecture and design philosophy of WPZylos Routing.

Philosophy

WPZylos Routing provides a unified, Laravel-like routing experience for WordPress plugins. It abstracts the complexity of WordPress's routing mechanisms while respecting WordPress conventions.

Architecture

+-------------------------------------------------------------+
—                    RoutingServiceProvider                    —
+-------------------------------------------------------------—
—                                                             —
—  +-------------+  +-------------+  +---------------------+ —
—  —   Router    —  — RestRouter  —  —    AjaxRouter       — —
—  — (Frontend)  —  — (REST API)  —  — (WordPress AJAX)    — —
—  +-------------+  +-------------+  +---------------------+ —
—         —                —                     —            —
—         ?                ?                     ?            —
—  +-------------+  +-------------+  +---------------------+ —
—  — Dispatcher  —  —RestDispatcher— —   wp_ajax_* hooks   — —
—  +-------------+  +-------------+  +---------------------+ —
—         —                —                                  —
—         ?                ?                                  —
—  template_redirect   rest_api_init                          —
—                                                             —
+-------------------------------------------------------------+

Route Types

Frontend Routes

Custom URL patterns that integrate with WordPress rewrite rules. Dispatched on template_redirect hook.

REST API Routes

WordPress REST API endpoints registered via register_rest_route(). Fully integrated with WordPress's REST infrastructure.

AJAX Routes

Traditional WordPress AJAX endpoints using wp_ajax_* hooks. Automatic nonce verification and JSON responses.

WordPress Integration

FeatureWordPress Hook/Function
Frontendtemplate_redirect + add_rewrite_rule()
REST APIrest_api_init + register_rest_route()
AJAXinit + add_action('wp_ajax_*')
Noncewp_verify_nonce(), wp_create_nonce()
Permissionscurrent_user_can()

Context Awareness

The router respects WordPress context and skips routing for:

  • Admin pages (is_admin())
  • Cron requests (wp_doing_cron())
  • AJAX requests (wp_doing_ajax())
  • REST API requests (REST_REQUEST)
  • XML-RPC requests (XMLRPC_REQUEST)

Middleware Pipeline

All routers support PSR-15 style middleware:

$router->get('/admin', [Controller::class, 'index'])
    ->middleware([AuthMiddleware::class, LogMiddleware::class]);

Middleware runs in order, with each calling $next($request) to continue the chain.