如何将 WP-CLI 支持添加到任何 WordPress 插件
已发表: 2018-08-14根据用户的需求调整插件是每个插件所有者必须遵循的主要议程之一。 对于意味着更多颜色选择器、字体和类似视觉选项的首页滑块。 但是,如果您迟早要满足开发人员、管理员和其他高级用户的需求,他们将需要 CLI 支持。 他们会想要放弃鼠标而只使用键盘。 感谢 WP-CLI 项目,为您的插件添加 CLI 支持是小菜一碟。
通过将@wpcli 支持添加到您的#WordPress 插件,您将向开发人员、高级用户和管理员开放它。
点击推文永恒的 GUI 与 CLI 之战
让我们解决一些问题:GUI(图形用户界面)并不比 CLI(命令行界面)好,反之亦然:CLI 并不比 GUI 好。 人们更喜欢其中之一。 这是个人喜好或习惯的问题。 “它们是一样的吗,它们可以互换吗?” 有一些妥协,是的,他们可以,但是,没有人喜欢在黑白命令行界面中选择颜色。 这简直适得其反。 他们每个人都有一个特定的目的。
“那为什么我们两个都需要? WP 不是更面向 GUI 吗?” 是的,WP 更面向 GUI。 但不适用于所有用户。 有些人以更适合 CLI 的方式使用 WP,它使他们能够更快地使用它。 此外,为什么不两者兼得? 它不会膨胀任何东西或妨碍。
所以,WP-CLI 是一个插件,对吧?
不,它不是插件。 您无需在 WordPress 安装中添加任何内容即可使 WP-CLI 正常工作。 您只需要操作系统上的 WP-CLI。 WP-CLI 是用 PHP 编写的,并打包在一个 phar 中。 这是一种将整个 PHP 应用程序放入单个文件的方法,即“phar”(PHP 存档),以便在各种操作系统之间轻松分发和安装。 安装过程取决于您的操作系统,但它很容易并且在 WP-CLI 手册中有详细记录 - 或者如果您更喜欢视频,这里是 Windows 上的 WP-CLI 安装之一。
我不会重复上面的任何材料。 它足够详细,应该可以让您在几分钟内开始使用 WP-CLI。 当您运行它时,将您的工作目录更改为您计划使用的 WP 安装并运行wp option get home
以确保您在正确的 WP 安装上并且 WP-CLI 可以正常工作。
它比看起来更简单
首先,我们需要一个函数来告诉我们用户是否通过 CLI 与 WP 进行交互。 它对于许多事情都很有用,例如在 CLI 中不发送任何 HTTP 标头以及在“常规”调用中不包含 CLI 函数。 它还使我们有机会重用最初为 GUI 编写的旧功能,只需进行一些小改动。
function is_cli_running() { return defined( 'WP_CLI' ) && WP_CLI; }
下一步是确定 CLI 命令的名称。 大约有 40 个内置命令。 因此,您不能使用这些名称中的任何一个,并且您应该远离任何品牌名称,例如“google”,因为您可能不拥有 Google。 理想情况下,它应该是插件的名称或它所执行的一组功能的总称,以便您可以将所有命令放在该名称下,以免污染主命名空间。 这是常识,就像任何一段代码一样。 让我们使用site-info
,我们将创建一些函数来返回有关站点的各种信息。
为了保持整洁,将所有与 WP-CLI 相关的代码放入一个新文件custom-wp-cli-commands.php
。 我们只会在需要并且所有 CLI 相关代码都可用时才包含该文件。 为此,我们将使用我们刚刚构建的函数。 为了测试和学习,将文件放在活动主题的文件夹中,然后将其添加到主题的functions.php
文件中。
if ( is_cli_running() ) { require_once 'custom-wp-cli-commands.php'; }
然后,把它放在custom-wp-cli-commands.php
;
/** * Just a few sample commands to learn how WP-CLI works */ class cli_site_info extends WP_CLI_Command { /** * Display version information. * ## OPTIONS * * [--wponly] * : Shows only WP version info, omitting the plugin one. */ function version( $args, $assoc_args ) { if ( !empty( $assoc_args['wponly'] ) ) { WP_CLI::line( 'Version of WordPress is ' . get_bloginfo( 'version' ) . '.' ); } else { WP_CLI::line( 'Version of this plugin is 0.1-beta, and version of WordPress ' . get_bloginfo( 'version' ) . '.' ); } } /** * Display the number of plugins. */ function plugins() { WP_CLI::line( 'There are a total of ' . sizeof( get_plugins() ) . ' plugins on this site.' ); } } WP_CLI::add_command( 'site-info', 'cli_site_info' );
如果您在浏览器中打开站点、主页或管理员,则不会发生任何事情。 那挺好的。 要测试新的 CLI 命令,请返回命令行窗口,运行wp site-info version
,您将获得插件和站点版本。 或运行wp site-info plugins
,您将获得网站上的插件总数。 容易,对吧? 让我们回顾一下代码。
就像扩展一个 PHP 类一样简单
我们的cli_site_info
类扩展了WP_CLI_Command
类; 那里没什么好看的。 你可以随意调用类。 重要的是文件最后一行的代码WP_CLI::add_command( 'site-info', 'cli_site_info' )
。 它注册我们的顶级命令并将我们的类与它联系起来。 如果您想将site-info
命令更改为其他内容,可以在这里进行。
类中的每个公共方法(函数)都是 WP-CLI 中的子命令。 请务必查看命令的结构以了解正确的 WP-CLI 术语。 无需在任何地方“注册”该方法或做任何额外的事情。 就像我们对plugins()
和version()
所做的那样——创建一个标准函数,就是这样。 WP-CLI 会知道如何处理它。
进入该方法后,您可以运行所需的任何代码。 但是,与 CLI 交互将需要一些自定义函数,因为echo
之类的功能无法按预期工作。 代替echo
的是WP_CLI::line()
。 内部 WP-CLI API 涵盖了您需要的一切,所有功能都有很好的文档记录,并分为输入、输出、杂项、系统和其他类别,这使得它们非常容易找到。
除了打印文本之外,您可能还想使用(关联)命令参数,这样您就可以调用诸如wp site-info version --wponly
(试一试)之类的东西,它只输出 WP 版本信息。 关联参数存储在方法的第二个函数参数中。 在我们的例子中,它被称为$assoc_args
。 唯一剩下的就是测试数组键的特定值并相应地调整代码,就像我们在function version( $args, $assoc_args )
中所做的那样。
文档和 CLI 内帮助
WP-CLI 有一个内置的帮助系统。 这很方便。 如果开发人员花一点时间在他的代码中描述命令,则永远不需要任何外部文档。 文档不会自己编写(不幸的是),但如果您在创建命令时投入最低限度,用户将永远感激不尽,因为您将所有文档放在一个屋檐下。
您使用 PHPDoc 格式将课堂中的文档作为注释编写。 如需深入了解,请查看 CLI 手册。 通过运行wp help site-info
,您将获得我们的子命令的列表和描述,如果您查看代码,您会看到它的来源。 非常不言自明。 有关 version 子命令的更多详细信息,请运行wp help site-info version
,您还将获得有关选项的详细信息。
虽然没有被很多人使用,但@wpcli 经常被那些塑造#WordPress 的未来和许多用户意见的人使用。 将 CLI 添加到您的插件可能是明智之举
点击推文让您的用户满意
当然,如果您正在开发天气小部件,则添加 WP-CLI 支持听起来不是正确的举措。 但是,顽固的开发人员和管理员使用的任何工具(例如 WP Reset)都将从 WP-CLI 中受益匪浅。 用户将能够链接命令、编写 bash 脚本,并且通常可以更快、更轻松地完成更多事情。 这会带来更好的评论、更快乐的用户、更多的用户,最终为你带来更多的钱,无论你采用何种货币化模式。