Howdy:使用现代PHP概念另辟蹊径高效率开发WordPress插件

Howdy:使用现代WordPress插件模板另辟蹊径

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_

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// 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
}
}
// 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 } }
// 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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer create-project syntatis/howdy -s dev
composer create-project syntatis/howdy -s dev
composer create-project syntatis/howdy -s dev

该命令将创建一个新目录howdy,提取所有项目文件,并安装 Packagist 的依赖项。

如果想在其他文件夹中创建项目,可以在命令末尾添加目录名,如下所示:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer create-project syntatis/howdy -s dev acme-plugin
composer create-project syntatis/howdy -s dev acme-plugin
composer create-project syntatis/howdy -s dev acme-plugin

然后,它会要求您输入插件别名 slug。插件别名是必填项,并且应该是唯一的。如果您计划在 WordPress.org 上发布您的插件,则插件 URL 中将使用此标签,例如https://wordpress.org/plugins/{slug}/ 。在本例中,我们将使用 acme-plugin

插件别名 slug

插件别名还将用于确定默认插件名称、命名空间前缀等。正如我们在下文中看到的,它可以很聪明地将 slug 转换为适当的格式。在本例中,我们将保留默认插件名称,同时将命名空间从AcmePlugin 更改为 Acme

将命名空间从AcmePlugin 更改为 Acme

输入完成后,会对项目文件进行必要的更新。例如,app/Plugin.php中的文件将包含名称空间和依赖项名称空间的前缀。

对项目文件进行必要的更新

包括哪些内容?

Howdy 预装了这些工具,以简化开发:

  • PHP-Scoper:它允许我们为使用 Composer 安装的依赖项添加前缀,以防止使用相同库时发生冲突。
  • PHPCS:它包含 PHPCS,但不使用 WordPress 编码标准,而是应用 PHP 生态系统中成熟的现代编码标准,如 PSR-12Doctrine 和 Slevomat
  • Kubrick:React.js 组件集,用于构建类似 WordPress 管理器中设置页面的应用程序。
  • @wordpress/scripts:用于编译 JavaScript 和样式表。你可以运行以下命令开始监视文件并自动编译更改: npm run start

目录结构

对于 WordPress 插件来说,Howdy使用的是一种略显非传统的结构。不过,如果你熟悉 LaravelSymfony 等框架,很快就能适应。

有三个主要目录

  1. app: 这个目录应该存放插件的核心类和业务逻辑。如果该目录下的类遵循 PSR-4 标准,则会自动加载。
  2. inc: 该目录包含配置文件、实用程序和 HTML 模板。
  3. src:该目录包含 JavaScript 和样式表文件的未编译源代码。

安装外部依赖

既然我们已经设置了插件模板,就可以使用 Composer 轻松安装其他软件包。例如,如果我们想构建一个集成 OpenAI 的插件,可以使用以下命令安装 openai-php/client 包:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer require openai-php/client
composer require openai-php/client
composer require openai-php/client

安装后,Howdy 会自动为该软件包中所有类的命名空间添加前缀。

你还可以安装专门用于开发的软件包。例如,要安装 symfony/var-dumper,一个用于调试的流行 PHP 软件包,可以运行:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer require symfony/var-dumper --dev
composer require symfony/var-dumper --dev
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 生态系统搭建了桥梁,为构建可维护、可扩展的插件提供了无数可能性。

评论留言