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
Requires
- php: ^8.0
- nikic/fast-route: ^1.3
- wpdiggerstudio/wpzylos-core: ^1.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.6 || ^10.0
- squizlabs/php_codesniffer: ^3.7
- szepeviktor/phpstan-wordpress: ^1.3
README
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.
📄 License
MIT License. See LICENSE for details.
🤝 Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Made with ❤️ by WPDiggerStudio