wpdiggerstudio/wpzylos-routing

FastRoute-based routing with WordPress rewrite integration for WPZylos framework

Fund package maintenance!
Paypal

Installs: 234

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/wpdiggerstudio/wpzylos-routing

v1.0.0 2026-02-01 13:02 UTC

This package is auto-updated.

Last update: 2026-02-01 13:03:50 UTC


README

PHP Version License GitHub

Full-featured routing package for WordPress with frontend routes, REST API endpoints, and AJAX actions.

📖 Full Documentation | 🐛 Report Issues

✨ Features

  • Frontend Routing — Custom URL patterns with WordPress rewrite integration
  • REST API Routing — Fluent API for /wp-json/ endpoints
  • AJAX Routing — Automatic action registration with nonce verification
  • Route Groups — Shared prefixes and middleware
  • Middleware Pipeline — PSR-15 style middleware support
  • Named Routes — URL generation from route names
  • Resource Routes — CRUD endpoint scaffolding

📋 Requirements

Requirement Version
PHP ^8.0
WordPress 6.0+

🚀 Installation

composer require wpdiggerstudio/wpzylos-routing

📖 Quick Start

Register the service provider in your plugin:

use WPZylos\Framework\Routing\RoutingServiceProvider;

$app->register(new RoutingServiceProvider());

Create route files in your plugin's routes/ directory:

File Purpose
routes/web.php Frontend routes
routes/api.php REST API routes
routes/ajax.php AJAX routes

🌐 Frontend Routing

// routes/web.php
return function (\WPZylos\Framework\Routing\Router $router) {
    $router->get('/products', [ProductController::class, 'index']);
    $router->get('/products/{id}', [ProductController::class, 'show'])
        ->where('id', '[0-9]+');

    $router->group(['prefix' => '/admin', 'middleware' => ['auth']], function ($router) {
        $router->get('/dashboard', [AdminController::class, 'dashboard']);
    });
};

🔌 REST API Routing

// routes/api.php
return function (\WPZylos\Framework\Routing\RestRouter $rest) {
    // GET /wp-json/my-plugin/v1/users
    $rest->get('/users', [UserController::class, 'index']);

    // With permission
    $rest->post('/users', [UserController::class, 'store'])
        ->permission('edit_users');

    // Resource routes (CRUD)
    $rest->resource('posts', PostController::class);
};

⚡ AJAX Routing

// routes/ajax.php
return function (\WPZylos\Framework\Routing\AjaxRouter $ajax) {
    // Private: requires login
    $ajax->private('save_settings', [SettingsController::class, 'save']);

    // Public: works without login
    $ajax->public('search', [SearchController::class, 'handle']);
};

🛡️ Middleware

class AuthMiddleware
{
    public function handle($request, callable $next): mixed
    {
        if (!is_user_logged_in()) {
            return new \WP_Error('unauthorized', 'Login required', ['status' => 401]);
        }
        return $next($request);
    }
}

// Apply to routes
$router->get('/dashboard', [Controller::class, 'index'])
    ->middleware(AuthMiddleware::class);

📦 Related Packages

Package Description
wpzylos-core Application foundation
wpzylos-container PSR-11 dependency injection
wpzylos-http Request/Response handling
wpzylos-scaffold Plugin template

� Documentation

For comprehensive documentation, tutorials, and API reference, visit wpzylos.com.

☕ Support the Project

If you find this package helpful, consider buying me a coffee! Your support helps maintain and improve the WPZylos ecosystem.

Donate with PayPal

📄 License

MIT License. See LICENSE for details.

🤝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

Made with ❤️ by WPDiggerStudio