WordPress 是一个使用 PHP 构建的流行博客平台,其可扩展性是它最大的优势之一。只需将一个 PHP 文件放到 wp-content/plugins
目录中,就可以创建一个插件,但多年来,WordPress 插件的广泛开发实践并没有太大发展–即使 PHP 本身已经有了很大改进。
随着新功能和新语法的出现,PHP 也发生了很大变化。例如,它现在包含了更好、更合适的 OOP 功能和自动加载功能。然而,WordPress 仍然在推广旧的过程式编程方法,要在插件中加入自动加载功能并不简单。
这就是 Howdy 诞生的原因,这是一个 WordPress 插件模板,旨在让 WordPress 插件开发中使用现代 PHP 概念变得更容易。
范围
Howdy 专注于提高工作效率的基本工具,而不会使工作流程过于复杂。它并不强求所有现代 PHP 实践,而是优先考虑两个基础功能:
名称间距
PHP 中的名称间距将类、函数和常量组织成逻辑组,类似于文件夹的文件结构,以防止命名冲突。例如,两个定义了 Security
的插件如果各自使用唯一的命名空间,就不会发生冲突。
传统上,WordPress 依靠前缀来实现隔离。假设您的插件名为“Simple Security by Acme”。您通常会在函数和类的前缀中使用您的组织名称 Acme_
或 acme_
:
// Prefix in a function name. function acme_check_security() { // Add security check logic here } // Prefix in a class name. class Acme_Security { public function check() { // Add class-specific logic here } }
虽然命名空间可以在 WordPress 插件中使用,但采用的情况仍然很少。这是因为如果没有自动加载,就无法充分发挥命名空间的潜力。
自动加载
在 WordPress 中自动加载类有两个主要限制。
首先,你不能自动加载第三方库(如 openai-php/client),而不为其命名空间添加前缀。如果两个插件加载相同的库,冲突的定义会导致网站崩溃。
此外,如果不使用 Composer,所有函数、常量或静态文件都必须使用 require_once
手动加载,从而增加了模板。
这就是 Howdy 要解决的两个主要问题。
一旦我们正确设置了这两项功能,采用其他高级 PHP 模式(如依赖注入或 Facades)就会变得容易得多。
让我们安装 Howdy,看看它的实际效果吧。
安装
我们可以使用 Composer 的 create-project
命令安装 Howdy:
composer create-project syntatis/howdy -s dev
该命令将创建一个新目录howdy
,提取所有项目文件,并安装 Packagist 的依赖项。
如果想在其他文件夹中创建项目,可以在命令末尾添加目录名,如下所示:
composer create-project syntatis/howdy -s dev acme-plugin
然后,它会要求您输入插件别名 slug。插件别名是必填项,并且应该是唯一的。如果您计划在 WordPress.org 上发布您的插件,则插件 URL 中将使用此标签,例如https://wordpress.org/plugins/{slug}/
。在本例中,我们将使用 acme-plugin
。
插件别名还将用于确定默认插件名称、命名空间前缀等。正如我们在下文中看到的,它可以很聪明地将 slug 转换为适当的格式。在本例中,我们将保留默认插件名称,同时将命名空间从AcmePlugin
更改为 Acme
。
输入完成后,会对项目文件进行必要的更新。例如,app/Plugin.php
中的文件将包含名称空间和依赖项名称空间的前缀。
包括哪些内容?
Howdy 预装了这些工具,以简化开发:
- PHP-Scoper:它允许我们为使用 Composer 安装的依赖项添加前缀,以防止使用相同库时发生冲突。
- PHPCS:它包含 PHPCS,但不使用 WordPress 编码标准,而是应用 PHP 生态系统中成熟的现代编码标准,如 PSR-12、Doctrine 和 Slevomat。
- Kubrick:React.js 组件集,用于构建类似 WordPress 管理器中设置页面的应用程序。
- @wordpress/scripts:用于编译 JavaScript 和样式表。你可以运行以下命令开始监视文件并自动编译更改:
npm run start
目录结构
对于 WordPress 插件来说,Howdy使用的是一种略显非传统的结构。不过,如果你熟悉 Laravel 或 Symfony 等框架,很快就能适应。
有三个主要目录
- app: 这个目录应该存放插件的核心类和业务逻辑。如果该目录下的类遵循 PSR-4 标准,则会自动加载。
- inc: 该目录包含配置文件、实用程序和 HTML 模板。
- src:该目录包含 JavaScript 和样式表文件的未编译源代码。
安装外部依赖
既然我们已经设置了插件模板,就可以使用 Composer 轻松安装其他软件包。例如,如果我们想构建一个集成 OpenAI 的插件,可以使用以下命令安装 openai-php/client
包:
composer require openai-php/client
安装后,Howdy 会自动为该软件包中所有类的命名空间添加前缀。
你还可以安装专门用于开发的软件包。例如,要安装 symfony/var-dumper,一个用于调试的流行 PHP 软件包,可以运行:
composer require symfony/var-dumper --dev
与 PHP 本地的 var_dump
函数相比,该软件包提供了更友好的调试体验。
准备发布
最后,Howdy 提供了几条命令来准备发布插件:
npm run build
:构建 src
目录中的所有资产文件,包括 JavaScript 和样式表。这些文件将经过优化和最小化,以用于生产。
composer run build
:重新编译项目并删除为开发而安装的软件包。
composer run plugin:zip
:为插件创建可安装的 ZIP 文件。在最终压缩包中,会排除一些不必要的文件,如 dotfiles、src
目录和 node_modules
。
小结
在本文中,我们探讨了 Howdy 及其对 WordPress 插件开发的益处。
Howdy 旨在实现插件开发的现代化,但又不会让您不知所措。它避免了用各种时髦工具臃肿您的工作流程(例如,默认情况下不包括 PHPUnit、PHPStan 或 TypeScript),但您可以在以后根据需要添加它们。
通过解决依赖冲突和启用 Composer,Howdy 为 WordPress 开发与更广泛的 PHP 生态系统搭建了桥梁,为构建可维护、可扩展的插件提供了无数可能性。
评论留言