yard / wp-hook-registrar
A package for WordPress hook registration.
Installs: 3 220
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 5
Forks: 0
Open Issues: 0
Type:package
pkg:composer/yard/wp-hook-registrar
Requires
- php: >=8.1
Requires (Dev)
- 10up/wp_mock: ^0.4.2
- pestphp/pest: ^2.34
- szepeviktor/phpstan-wordpress: ^1.0
- yard/php-cs-fixer-rules: ^1.0
This package is auto-updated.
Last update: 2025-10-23 14:31:14 UTC
README
Register Hooks using php attributes.
Installation
Install this package with Composer:
```sh
composer require yard/wp-hook-registrar
```
Usage
To use this package in a standard WordPress plugin, you can use the HookRegistrar to register hooks.
You can skip step 3 and 4 from the installation instructions above and instead add the following to your plugin's
main file:
/** * Plugin Name: My Plugin */ require __DIR__ . '/vendor/autoload.php'; $classNames = [ \Plugin\ClassContainsHooks::class, \Plugin\AnotherClassContainsHooks::class, ]; $registrar = new \Yard\Hook\Registrar($classNames); $registrar->registerHooks();
Hook Attributes
This package provides two Attributes: Action and Filter. They can be used to register hooks instead of the
WordPress functions add_action() and add_filter()
This syntax allows you to place the hook registration directly above the method it invokes when the hook is triggered.
#[Action(string $hookName, int $priority = 10)] public function doSomething(): void
#[Filter(string $hookName, int $priority = 10)] public function filterSomething(): mixed
Notice that you do not need to pass the number of accepted arguments to the Action and Filter attributes as you would
with add_action() and add_filter(). Instead, the number of accepted arguments is determined by the method
signature.
You can add as many hooks to the same method as you want.
Example
<?php namespace App\Hooks; use Yard\Hook\Action; use Yard\Hook\Filter; class Theme { #[Action('save_post')] public function doSomething(int $postId, \WP_Post $post, bool $update): string { // do something } #[Filter('the_content')] #[Filter('the_excerpt')] public function filterSomething(string $content) { // filter content return $content; } }