graft / framework-core
WordPress插件开发的框架核心。
v1.0.0
2019-09-05 18:40 UTC
Requires
- php: ^7.2
- doctrine/annotations: ^1.6
- gears/class-finder: ^1.0
- graft/wp-container: ^0.0.6
- symfony/config: ^4.2
- symfony/yaml: ^4.2
- twig/extensions: ^1.5
- twig/twig: ^2.7
This package is auto-updated.
Last update: 2024-09-06 05:07:25 UTC
README
Graft是一个用于WordPress插件开发的框架。它为您的插件提供清晰的面向对象(OOP)和模型-视图-控制器(MVC)模式的代码架构。
为什么选择Graft?
面向对象(OOP)
我是一个热爱面向对象的开发者,因此当我开始WordPress开发时,我感到沮丧,因为一些插件没有使用面向对象。
当然,我明白一些小型插件不需要使用面向对象,所以这个框架是为具有复杂功能的插件而设计的。
创建更友好的开发者插件
在我的WordPress开发者经验中,当我在使用一些插件时,我经常问相同的问题
- 这个插件使用了哪些钩子?
- 这个插件提供了一些可用的过滤器吗?
- 能否覆盖这个插件的模板?
Graft的主要功能
面向对象(OOP)
在一个WordPress插件中,您不必编写面向对象的代码(您可以使用仅函数),但是使用Graft,所有内容都是对象,以提高代码质量。
MVC模式和从主题中覆盖模板
Graft使用Twig模板引擎,允许您在插件中实现MVC模式。并且Graft允许开发者(如果给予权限)从他们的主题中覆盖所有插件的模板。
注释
在Graft中,由于面向对象,所有基本的WordPress函数,如add_action('wp_head')
或add_filter()
,都是注释,如@Action(name="wp_head")
,因此您不需要指定任何回调,它使用指定的方法。
容器
所有使用Graft制作的插件都有一个依赖注入容器(PHP-DI容器),用于使用自动装配您的类或Graft可注入组件。
并且容器中列出了插件使用的所有WordPress组件(动作、过滤器、管理页面等)。
示例
这是使用Graft框架的代码示例
use Graft\Framework\Annotation\Filter; //use Filter Annotation use Graft\Framework\Injectable\Renderer; /** * Class that will be construct by the Factory * This class can be injected with autowiring in other Class. */ class MyHookManager { /** * HookManager Renderer * Use for Template Rendering * * @var Renderer */ private $renderer; /** * MyHookManager Constructor * using autowiring for dependency injection * * @param Renderer $renderer */ public function __construct(Renderer $renderer) { $this->renderer = $renderer; } /** * This Method will be add to 'the_title' Filter by Annotation * * And 'the_title' Filter will be added in the Plugin Container * for other developers who want to know wich Hooks this Plugin using. * * @Filter(name="the_title") * * @param string $title Current Title * * @return string */ public function titleFilterHook(string $title) { //some example code... $title = trim($title); // using Twig for Custom Title HTML... // this template can be override in the Theme in // (wp-content/themes/mytheme/currentPluginName/filter/title.html.twig) for example. return $this->renderer->render('filter/title.html.twig', ['title' => $title]); } }