Pollora
A framework that runs WordPress inside Laravel. Open source, MIT licensed, born out of the daily practice of an agency that has been shipping WordPress since 2018.
What it changes
Declaring a custom post type in WordPress takes a call to
register_post_type(), an array of labels, and an
add_action('init') to hook it up. Some thirty lines that say
nothing more than “this is a book”.
use Pollora\Attributes\PostType;
use Pollora\Attributes\HasArchive;
use Pollora\Attributes\Supports;
use Pollora\Attributes\ShowInRest;
#[PostType('book')]
#[HasArchive]
#[Supports(['title', 'editor', 'thumbnail'])]
#[ShowInRest]
class Book {}
The class does not need registering: it gets discovered. The labels are derived from the name. What is left on screen is what the developer meant to say — the rest is noise the framework absorbs.
Routing follows the same logic. Laravel routes take over where they exist; the WordPress template hierarchy handles everything else.
Route::wp('single', [PostController::class, 'show']);
Route::wp('page', 'contact', [ContactController::class, 'index']);
Who it is for
If you work with Bedrock, Sage or Radicle, you are already at home. Roots showed the way: Composer instead of FTP, Blade instead of template files, per-environment configuration, a real asset pipeline. That ground is settled, and Pollora does not reopen it.
The difference is one of direction. Acorn — at the heart of Radicle — brings Laravel components into WordPress: the container, Blade, configuration, Eloquent, routes for virtual pages. Pollora takes the problem the other way round: the application is a full Laravel 13, with its service providers, dependency injection, routing and modules — and WordPress runs inside it.
This is not a complaint aimed at Roots: without Bedrock and Sage, this audience would not exist. It is the step after, for those who ended up wanting Laravel whole.
Why Laravel
First because it is a pleasure to write. The argument sounds slight; it is not. A developer who enjoys the work writes better, documents more and stays longer. Laravel’s API was designed to be read, and you feel it within the first hour.
Then because nothing needs reinventing. Eloquent, queues, cache, events, Artisan commands, migrations, Pest — it all exists, documented, tested and maintained by others. An in-house foundation would have taken years to reach a tenth of it, and then it would have needed maintaining.
Then because the skills are on the market. Hiring someone who knows Laravel is straightforward; hiring someone who knows an internal framework is not. For an agency, choosing a foundation is as much a recruitment decision as an architectural one.
Finally because the two tools do not tread on each other. WordPress’s backward compatibility is its greatest strength: twenty years of sites still running. It is also what stops it adopting modern PHP without breaking half the web. Laravel has no such constraint. Layering the two leaves each on its own ground — WordPress holds the content and the editors, Laravel holds the application.
What is in the box
- PHP 8 attributes
- Hooks, post types, taxonomies, schedules and REST routes declared on the class
- Auto-discovery
- Components are scanned and registered without a line of declaration
- Hybrid routing
- Laravel routes take priority; the WordPress template hierarchy handles the rest
- Blade themes
- PSR-4 autoloading, parent and child themes, Vite asset pipeline
- Authentication
- Laravel’s guard and password hashing wired into WordPress
- Events
- WordPress, WooCommerce, Gravity Forms and Yoast dispatched through Laravel
- Modules
- Application split via nwidart/laravel-modules
composer create-project pollora/pollora my-project
Where it comes from
Pollora did not come out of a laboratory. The problems it solves are the
ones you hit while shipping sites: a
register_post_type() copied for the hundredth time, hooks
scattered through functions.php, a theme you cannot test. It
is the work of a team that does WordPress every day at
AmphiBee, made
public under the MIT licence.
Twenty-five public repositories, test coverage held at 100 %, PHPStan, Pint and Rector in the pipeline. The main package has 3,771 downloads on Packagist — figure read when this page was built.
github.com/Pollora/framework Documentation Packagist
PHP 8.3Laravel 13WordPress 7.0+MIT