Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `template_redirect` ran before the application's providers had booted — WordPress is loaded from a provider's boot, the theme's providers boot after it — so a view rendered from it lacked the theme's view composers and shared data. It now runs once every provider has booted, still before routing, and `pollora_loaded` after it (#419)
- Trackbacks answered 500: `wp-trackback.php` was required from a method, where it found no `$wp` and loaded WordPress a second time (#419)

### Changed
- README: the organization's banner and badges (CI instead of Codecov), installation first, the newer features listed (typed meta, roles, blocks and Block Bindings, `pollora:doctor`), and the type coverage check under Testing

## [v13.35.0](https://github.com/Pollora/framework/compare/v13.34.6...v13.35.0) - 2026-10-06

### Added
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2025 RuBee group
Copyright (c) 2025 RuBee group (https://rubee.group)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
84 changes: 42 additions & 42 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,40 @@
<p align="center">
<a href="https://pollora.dev">
<img src="resources/images/pollora-logo.svg" width="400" alt="Pollora">
<img src="https://raw.githubusercontent.com/Pollora/.github/main/brand/banners/framework.png" width="100%" alt="Pollora: The Laravel framework for WordPress">
</a>
</p>

<p align="center">
<a href="https://packagist.org/packages/pollora/framework"><img src="https://img.shields.io/packagist/v/pollora/framework?include_prereleases" alt="Latest Version"></a>
<a href="https://packagist.org/packages/pollora/framework"><img src="https://img.shields.io/packagist/v/pollora/framework" alt="Latest Version"></a>
<a href="https://packagist.org/packages/pollora/framework"><img src="https://img.shields.io/packagist/dt/pollora/framework" alt="Total Downloads"></a>
<a href="https://codecov.io/gh/Pollora/framework"><img src="https://codecov.io/gh/Pollora/framework/branch/main/graph/badge.svg" alt="Coverage"></a>
<a href="https://github.com/Pollora/framework/actions/workflows/ci.yml"><img src="https://github.com/Pollora/framework/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
<a href="LICENSE"><img src="https://img.shields.io/github/license/Pollora/framework" alt="License"></a>
</p>

## About Pollora

**Pollora is the Laravel framework for WordPress.** WordPress runs inside a Laravel application: the front end uses Laravel routing, controllers, Blade and Eloquent, while the WordPress admin, database, editors' workflow and plugins keep working as usual. Hooks, post types, taxonomies and REST routes are declared with PHP 8 attributes and registered by auto-discovery.
**Pollora is the Laravel framework for WordPress.** WordPress runs inside a Laravel application: the front end uses Laravel routing, controllers, Blade and Eloquent, while the WordPress admin, database, editors' workflow and plugins keep working as usual. Hooks, post types, taxonomies and REST routes are declared with PHP 8 attributes and registered by auto-discovery, so `functions.php` stops being the place where everything piles up.

[Website](https://pollora.dev) · [Documentation](https://pollora.dev/getting-started/installation/) · [Why Pollora](https://pollora.dev/why/) · [How Pollora compares with Acorn, Sage, Radicle and Corcel](https://pollora.dev/compare/) · [1-minute tour](https://www.youtube.com/watch?v=Wk1VzPapqM8)

## Installation

Create a project with the [Pollora CLI](https://github.com/Pollora/cli), or with Composer through the [skeleton](https://github.com/Pollora/pollora). See the [installation guide](https://pollora.dev/getting-started/installation/):

```bash
composer global require pollora/cli
pollora new my-project --ddev

# or
composer create-project pollora/pollora my-project
```

Requirements:

- PHP 8.4+ for a new project (the skeleton's lock file ships Symfony 8; this package alone accepts PHP 8.3)
- Laravel 13.35 (Pollora's version numbers follow the Laravel release it is built on)
- WordPress 7.1+

## Quick start

```php
use Pollora\Attributes\Filter;
use Pollora\Attributes\PostType;
Expand All @@ -35,40 +53,25 @@ class Seo
}
```

### Key Features
## Key features

- **WordPress routing** via `Route::wp()` with template hierarchy support
- **PHP attributes** for hooks (`#[Action]`, `#[Filter]`), post types (`#[PostType]`), taxonomies (`#[Taxonomy]`), scheduling (`#[Schedule]`), and REST routes (`#[WpRestRoute]`)
- **PHP attributes** for hooks (`#[Action]`, `#[Filter]`), post types (`#[PostType]`), taxonomies (`#[Taxonomy]`), scheduling (`#[Schedule]`), REST routes (`#[WpRestRoute]`), AJAX handlers (`#[Ajax]`), WP-CLI commands (`#[WpCli]`) and abilities (`#[Ability]`)
- **Typed meta and roles** declared in code: `#[Meta]`, `#[PostMeta]`, `#[TermMeta]`, `#[Role]`, `#[ModifyRole]`
- **Gutenberg blocks** rendered with Blade, and Block Bindings sources for meta and options
- **Auto-discovery system** that scans and registers components automatically
- **Blade templates** with [Sage Directives](https://log1x.github.io/sage-directives-docs/) for WordPress data
- **Theme system** with dynamic PSR-4 autoloading, parent/child theme support, and Vite asset management
- **WordPress authentication** guard and password hashing integration
- **Event dispatching** for WordPress core, WooCommerce, Gravity Forms, and Yoast SEO
- **Module system** via [nwidart/laravel-modules](https://github.com/nwidart/laravel-modules)
- **`pollora:doctor`**, which finds the setups that fail without an error and prints the fix (also in Tools › Site Health)

## Documentation

Full documentation is available at **[pollora.dev](https://pollora.dev)**.

## Installation

Create a project with the [Pollora CLI](https://github.com/Pollora/cli), or with Composer through the [skeleton](https://github.com/Pollora/pollora). See the [installation guide](https://pollora.dev/getting-started/installation/):

```bash
composer global require pollora/cli
pollora new my-project --ddev

# or
composer create-project pollora/pollora my-project
```

## Requirements

- PHP 8.4+ for a new project (the skeleton's lock file ships Symfony 8; this package alone accepts PHP 8.3)
- Laravel 13.35 (Pollora's version numbers follow the Laravel release it is built on)
- WordPress 7.1+
Full documentation is available at **[pollora.dev](https://pollora.dev/getting-started/installation/)**.

## Learn more
Learn more:

- [WordPress hooks with PHP 8 attributes](https://pollora.dev/guides/wordpress-hooks-php-attributes/)
- [Custom post types and taxonomies with PHP attributes](https://pollora.dev/guides/custom-post-types-php-attributes/)
Expand All @@ -78,21 +81,14 @@ composer create-project pollora/pollora my-project
## Testing

```bash
composer test # Run all checks (Rector, Pint, PHPStan, Pest)
composer test:unit # Run Pest tests with 100% coverage requirement
composer test:types # Run PHPStan static analysis
composer test:lint # Check code style with Pint
composer test:refacto # Check refactoring rules with Rector
composer test # Run all checks (Rector, Pint, PHPStan, Pest, type coverage)
composer test:unit # Run Pest tests with 100% coverage requirement
composer test:types # Run PHPStan static analysis
composer test:lint # Check code style with Pint
composer test:refacto # Check refactoring rules with Rector
composer test:type-coverage # Check type coverage (98% minimum)
```

## Contributing

Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.

## Security

If you discover a security vulnerability, please report it via [GitHub Security Advisories](https://github.com/Pollora/framework/security/advisories/new). See [SECURITY.md](SECURITY.md) for details.

## Changelog

All notable changes are documented in [CHANGELOG.md](CHANGELOG.md).
Expand All @@ -101,8 +97,12 @@ All notable changes are documented in [CHANGELOG.md](CHANGELOG.md).

Pollora builds on the work of [Roots](https://roots.io), a constant source of inspiration: themes, blocks and plugins are built with `@roots/vite-plugin`, the project follows the Bedrock layout with `roots/bedrock-autoloader`, and Blade ships [Sage Directives](https://github.com/Log1x/sage-directives). The WordPress models are built on [Colt](https://github.com/Pollora/colt), a fork of [Corcel](https://github.com/corcel/corcel).

## Contributing

Contributions are welcome: see the [contributing guide](CONTRIBUTING.md). Report security issues privately, as described in the [security policy](SECURITY.md).

## License

Pollora is open-sourced software licensed under the [MIT license](LICENSE).
Pollora is open-source software licensed under the [MIT license](LICENSE). © [RuBee group](https://rubee.group)

Parts of the WordPress integration (`Pollora\Support\WordPress`, `Pollora\Hashing\WordPressHasher`) originate from work by Jordan Doyle, released under the 0BSD and WTFPL licenses.
Loading