paperpixel/wp-hooks

将Wordpress的functions.php文件拆分为小型的、可读的钩子

0.4.0 2016-01-20 16:29 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:52:57 UTC


README

将Wordpress的functions.php文件拆分为小型的、可读的钩子。

需求

您的Wordpress文件和插件应该由Composer管理。查看Bedrock boilerplate Wordpress结构以开始。

安装

使用Composer安装: composer require paperpixel/wphooks

使用方法

创建钩子

通过扩展WPHook类来创建钩子

use WPHooks\WPHook;

class ExampleHook extends WPHook {
    // Mandatory method, used to register actions and filters with Wordpress.
    public function register() {
        $this->add_action('init', 'my_action_hook');
        $this->add_filter('the_title', 'my_filter_hook');
    }

    private function my_action_hook() {
        // Stuff here will be called by Wordpress
    }

    private function my_filter_hook($title) {
        // Stuff here will be called by Wordpress
    }
}

注意:我们利用Composer的自动加载特性,使用use关键字通过命名空间导入类。

使用钩子

在您的functions.php类中,实例化ExampleHook并调用register()方法。

// functions.php
include 'ExampleHook.php';

$example_hook = new ExampleHook();
$example_hook->register();

使用WPHookLoader更容易创建钩子

您可以使用WPHookLoader轻松实例化您的钩子

// functions.php

include 'ExampleHook.php';
include 'Hook1.php';
include 'Hook2.php';
include 'Hook3.php';

// You can pass a WPHook instance
WPHooks\WPHookLoader::register(new ExampleHook());

// Or an array of WPHook instances
WPHooks\WPHookLoader::register([
   new Hook1(),
   new Hook2(),
   new Hook3(),
   ...
]);

自动加载

我们可以在主题中利用Composer的ClassLoader功能,这样我们就不必在functions.php中要求每个钩子。

考虑以下主题结构

hooks/
    actions/
        ExampleAction.php
    filters/
        ExampleFilter.php
__autoload.php
functions.php

首先创建__autoload.php文件

// __autoload.php

use Composer\Autoload\ClassLoader;

$loader = new ClassLoader();
$loader-> register();

$loader->addPsr4('Hooks\\Actions\\', __DIR__ . '/hooks/actions');
$loader->addPsr4('Hooks\\Filters\\', __DIR__ . '/hooks/filters');

在您的钩子类中,添加与__autoload.php相应的命名空间

// hooks/actions/ExampleAction.php

namespace Hooks\Actions;

use WPHooks\WPHook;

class ExampleAction extends WPHook {
    function register() {
        ...
    }
}

最后,在functions.php中实例化您的钩子

// functions.php

// Without WPHookLoader
$example_actions = new Actions\ExampleAction();

// With WPHookLoader
WPHooks\WPHookLoader::register(new Actions\ExampleAction());