Help us continue to build and maintain our open source projects. We’re a small team of independent developers and every little bit helps.
Laravel Routing in WordPress
See Laravel's routing documentation to better understand how routing works in Acorn
Acorn allows you to use Laravel's routing functionality on your WordPress sites, and will automatically handle Laravel routes defined in the routes/web.php file if it exists.
Routes are an easier way to implement virtual pages in WordPress.
Basic routing example
Create the route file
Create routes/web.php with the following:
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application.
|
*/
Route::view('/welcome/', 'welcome')->name('welcome');
Create the view file
Create resources/views/welcome.blade.php with the following:
@extends('layouts.app')
@section('content')
<h1>Welcome</h1>
@endsection
Update Acorn's configuration
Find where Application::configure is used in your setup. On a Sage theme, this would be functions.php.
Add ->withRouting(web: base_path('routes/web.php')):
Application::configure()
->withProviders([
App\Providers\ThemeServiceProvider::class,
])
+ ->withRouting(web: base_path('routes/web.php'))
->boot();
See Advanced booting for more examples.
Configuring SEO elements
Since registered routes are dynamic, WordPress is not aware of how to handle some SEO elements and functionality:
- Setting the canonical URL
- Setting the
<title> - Adding SEO-related meta data
- Adding pages to the sitemap
Laravel's Route facade allows you to access information about the route, which can be used with hooks to populate this data:
/**
* Set the page <title> for the welcome route
*/
add_filter('pre_get_document_title', function ($title) {
$name = Route::currentRouteName();
if ($name === 'welcome') {
return 'Welcome Page';
}
return $name;
});
Advanced routing features
For more complex applications, you can use:
- Controllers and Middleware - Organize route logic with controllers and filter requests with middleware
- Eloquent Models - Work with WordPress data using Laravel's ORM in your controllers
Using controllers
Instead of defining route logic directly in your routes file, you can organize it into controller classes:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;
Route::get('/api/posts', [PostController::class, 'index']);
Route::get('/api/posts/{id}', [PostController::class, 'show']);
Applying middleware
Protect routes with middleware for authentication, rate limiting, and more:
Route::middleware('auth')->group(function () {
Route::post('/api/posts', [PostController::class, 'store']);
Route::put('/api/posts/{id}', [PostController::class, 'update']);
});
Route caching
If you're using routes then you should enable Laravel's route cache during your deployment process:
$ wp acorn route:cache
Last updated