realtyna / wp-plugin-framework
一个用于开发具有一致设计和结构的 WordPress 插件的框架。
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/var-dumper: ^v5.4.0
- vlucas/phpdotenv: ^5.4
- yoast/phpunit-polyfills: ^2.0
This package is auto-updated.
Last update: 2024-09-02 11:12:01 UTC
README
欢迎使用 Realtyna 基础插件,这是一个用于开发 WordPress 插件的模块化和可扩展的基础。此框架旨在通过提供一系列工具和约定来简化插件开发过程,使开发者能够创建健壮且易于维护的插件。
介绍
嗨,我是 Chandler,我在 Realtyna 工作。我是一名高级后端/WordPress 开发者。在 Realtyna,我们开发了众多插件,而这个框架是我们持续改进开发过程的结果。
以前,我创建了一个名为 Realtyna MVC Core 的 WordPress 框架,您可以在 这里 找到其文档。这种结构几乎一年里都为我们服务得很好。然而,随着时间的推移,我意识到我们过度依赖了一些非必要的第三方 Composer 包。这促使我重构了这个框架。想法保持不变,但这次我相信执行得更好。
我很乐意听取您对这个项目的意见和建议!
特性
- 模块化架构:使用组件和子组件创建具有明确关注点分离的插件。
- 设置管理:使用集中处理程序轻松管理插件设置。
- 数据库迁移:利用迁移系统进行数据库模式管理。
- 管理页面管理:使用自定义模板简化管理页面的创建和组织。
- 自定义工具:实现自定义日志记录、辅助函数等。
- 抽象类:用于常见 WordPress 功能的基础类,如管理页面、自定义文章类型、分类法、小工具、短代码、AJAX 处理程序和 REST API 端点。
文档
为所有级别的开发者提供全面文档
安装
创建基础插件
要使用 Realtyna 基础插件框架创建新的 WordPress 插件,您可以使用以下 Composer 命令
composer create-project realtyna/base-plugin {PluginName}
将 {PluginName}
替换为您想要的插件名称。此命令将生成您新插件的基本结构,并自动更新命名空间、常量名称、插件名称和配置设置,这些设置基于您提供的项目名称。
配置您的插件
运行 create-project
命令后,脚本将自动
- 更新命名空间:所有类文件中的命名空间将更新以匹配您的项目名称。
- 更新常量名称:在整个项目中使用的常量名称将反映您的插件名称。
- 更新插件名称:在代码和配置的各个部分中使用的插件名称将被设置为您提供的名称。
- 配置
config.php
:将更新config.php
文件,以反映您插件的名称、别名和文本域,这些基于项目名称。
示例配置
位于 ./src/Config/config.php
目录的 config.php
文件将自动配置,但如果需要,您仍然可以自定义其他设置。以下是一个示例:
return [ 'name' => 'Realtyna Base Plugin', 'slug' => 'realtyna-base-plugin', 'text-domain' => 'realtyna-base-plugin', 'log' => [ 'active' => true, 'level' => 'error', 'path' => REALTYNA_BASE_PLUGIN_DIR . '/logs' ], ];
- name:您的插件的名称。
- slug:用于您的插件的 slug(通常是将名称转换为小写,并使用短横线分隔的版本)。
- text-domain:用于翻译目的的文本域。
- log:日志配置。将
active
设置为true
以启用日志记录,并指定日志记录的level
(例如,error
、warning
、info
)。
Main.php
概述
Main.php
文件是您插件的核心。它扩展了 StartUp
类,并处理插件组件的初始化、管理页面、日志记录和数据库迁移。
Main.php
中的关键方法
-
components():在这里注册您的插件组件。每个组件都是一个单独的类,它封装了特定的功能,例如处理自定义文章类型或 AJAX 请求。
protected function components(): void { $this->addComponent(YourComponent::class); }
-
adminPages():注册您插件的行政页面。行政页面允许您在 WordPress 控制台中创建自定义界面。
protected function adminPages(): void { $this->addAdminPage(YourAdminPage::class); }
-
boot():此方法用于引导您的插件,设置容器,并初始化配置的日志记录。
protected function boot(): void { // Set the container in the App class for global access. App::setContainer($this->container); if($this->config->get('log.active')){ Log::init($this->config->get('log.path'), $this->config->get('log.level')); } }
-
migrations():在这里注册数据库迁移。迁移处理数据库模式的变化,例如创建或修改表。
protected function migrations(): void { $this->addMigration(CreateYourTableMigration::class); }
组件开发
组件是处理特定任务的插件模块化部分。例如,您可能有一个用于自定义文章类型的组件,另一个用于处理 AJAX 请求,还有一个用于注册 REST API 端点。
示例:创建组件
以下是一个创建带有所有功能的组件的基本示例
namespace MyCompany\MyPlugin\Components; use Realtyna\MvcCore\Abstracts\ComponentAbstract; class MyComponent extends ComponentAbstract { public function register() { // Register your component actions and filters here } public function postTypes() { $this->addPostType(MyCustomPostType::class); } public function subComponents() { $this->addSubComponent(MySubComponent::class); } public function adminPages() { $this->addAdminPage(MyAdminPage::class); } public function ajaxHandlers() { $this->addAjaxHandler(MyAjaxHandler::class); } public function shortcodes() { $this->addShortcode(MyShortcode::class); } public function restApiEndpoints() { $this->addRestApiEndpoint(MyRestApiEndpoint::class); } public function widgets() { $this->addWidget(MyWidget::class); } public function customTaxonomies() { $this->addCustomTaxonomy(MyCustomTaxonomy::class); } }
组件中的关键方法
- register():此方法用于在 WordPress 中注册组件的动作和过滤器。
- postTypes():添加此组件处理的自定义文章类型。
- subComponents():如果您的组件有子组件,请在此处注册它们。
- adminPages():添加属于此组件的任何行政页面。
- ajaxHandlers():注册将响应对 AJAX 请求的 AJAX 处理程序。
- shortcodes():添加此组件提供的任何简码。
- restApiEndpoints():注册任何 REST API 端点。
- widgets():添加此组件提供的任何自定义小工具。
- customTaxonomies():注册任何自定义分类法。
通过遵循此结构,您可以使用 Realtyna Base 插件框架构建结构良好、易于维护和可扩展的 WordPress 插件。
贡献
欢迎贡献!请分支存储库并为任何增强或错误修复提交拉取请求。
许可证
本项目采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。
致谢
- 感谢所有使开发更快、更简单的开源项目。