amphibee / hooks
一个面向对象的 WordPress 插件 API 包。
Requires
- php: ^7.4|^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- phpunit/phpunit: ^9.0
- symfony/var-dumper: ^5.1
- vimeo/psalm: ^3.11
This package is auto-updated.
Last update: 2024-09-14 15:58:11 UTC
README
此包提供了一个面向对象的 API,用于与 WordPress 插件 API 一起使用。该包还包括自动“参数数量”计算和可链式回调。
安装
您可以通过 composer 安装此包
composer require digitalbitdev/hooks
用法
为每种类型的 "钩子" 提供了一个专用类。
动作
要与动作交互,您需要使用 \DigitalBit\Hooks\Action
类。
注册动作:
要注册一个动作,调用 Action::add()
方法。此方法需要 3 个参数
use DigitalBit\Hooks\Action; Action::add($name, $callback, $priority);
您不需要提供回调函数的参数数量。这将通过 Reflection API 自动解决。
链式回调:
您可以提供额外的回调,在您的初始回调 之后 执行。例如,您可能希望调用应用程序助手执行额外操作。
use DigitalBit\Hooks\Action; Action::add('init', function () { // do something here... })->then([MyPlugin::class, 'checkUserIsAdmin']);
链式回调将接收初始回调的 返回值 和所有参数。
class MyPlugin { public static function checkUserIsAdmin($resultFromInitialCallback, ...$extraArgs) { // ... } }
运行动作:
您可以使用 Action::do()
方法触发/运行一个动作,就像您使用 do_action
一样传递参数。
use DigitalBit\Hooks\Action; Action::do('my_plugin_action', $argument, $another);
删除动作:
要删除一个动作,请使用 Action::remove()
方法
use DigitalBit\Hooks\Action; Action::remove('init', $callbackToRemove, $priority);
过滤器
要与过滤器交互,您需要使用 \DigitalBit\Hooks\Filter
类。
注册过滤器:
要注册一个过滤器,使用 Filter::add()
方法
use DigitalBit\Hooks\Filter; Filter::add('the_title', function ($title) { return $title . ' is the title.'; });
链式回调:
您可以提供额外的回调,在您的初始回调 之后 执行。例如,您可能希望调用应用程序助手执行额外操作。
use DigitalBit\Hooks\Filter; Filter::add('the_title', function ($title) { return $title . ' is the title.'; })->then('strtoupper');
链式回调的行为与动作相同,并将接收初始回调的 返回值 和传递给初始回调的任何参数。
上面的示例将 $title . ' is the title'
的返回值传递给 strtoupper
方法。
应用过滤器:
您可以使用 Filter::do()
或 Filter::apply()
方法(Filter::apply()
是 Filter::do()
的别名)来应用过滤器。这些方法的行为与 Action::do()
方法相同,并接受相同的参数。
use DigitalBit\Hooks\Filter; $title = Filter::do('the_title', 'Hello, World!'); // or.. $title = Filter::apply('the_title', 'Hello, World!');
删除过滤器:
您可以使用 Filter::remove()
方法删除过滤器。这与 Action::remove()
方法的行为相同,并且两者使用相同的底层逻辑。
$callback = function () { }; // logic here... Filter::remove('the_title', $callback);
可钩接的类
此包提供了一个方便的 Hookable
接口,可用于注册单次使用的类回调。
use DigitalBit\Hooks\Contracts\Hookable; class InitAction implements Hookable { public function execute() { // ... } } Action::add('init', InitAction::class);
接收钩子参数:
要接收调用者传递的参数,在您的类中定义构造函数并将它们分配给属性
use DigitalBit\Hooks\Contracts\Hookable; class TheTitleFilter implements Hookable { private string $title; public function __construct(string $title) { $this->title = $title; } public function execute() { if ($this->title !== 'My First Post') { return $this->title; } return "{$this->title} is Amazing!"; } } Filter::add('the_title', TheTitleFilter::class);
测试
composer test
变更日志
请参阅 CHANGELOG 以获取有关最近更改的更多信息。
贡献
请参阅 CONTRIBUTING 以获取详细信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 ryan@digitalbit.dev 而不是使用问题跟踪器。
致谢
许可证
麻省理工学院许可证(MIT)。有关更多信息,请参阅许可证文件。