paperpixel / wp-hooks
将Wordpress的functions.php文件拆分为小型的、可读的钩子
0.4.0
2016-01-20 16:29 UTC
Requires
- php: >=5.3.9
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());