amphibee/hooks

一个面向对象的 WordPress 插件 API 包。

dev-master 2022-09-14 11:34 UTC

This package is auto-updated.

Last update: 2024-09-14 15:58:11 UTC


README

Latest Version on Packagist GitHub Tests Action Status Total Downloads

此包提供了一个面向对象的 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)。有关更多信息,请参阅许可证文件