Docker环境下WordPress扩展WP-CLI自定义命令失败求助
在Docker环境中扩展WP-CLI自定义命令的解决方案
问题背景
你通过给定的docker-compose.yml配置部署了WordPress环境,WP-CLI可通过docker exec site-cli wp --info正常调用,但在开发插件中使用WP_CLI::add_command注册的自定义命令,执行时提示“命令未注册”。
解决步骤
1. 确保开发插件已激活
WP-CLI默认只会加载已激活的插件中的自定义命令,先在容器内激活你的插件:
docker exec site-cli wp plugin activate your-plugin-slug
执行以下命令验证插件状态:
docker exec site-cli wp plugin list
确认目标插件的status列显示为active。
2. 检查自定义命令的代码规范
确保你的命令代码符合WP-CLI的要求,示例写法如下(放在插件主文件或单独的命令文件中):
<?php /** * Plugin Name: 自定义WP-CLI命令插件 */ // 仅在WP-CLI环境下加载命令 if ( defined( 'WP_CLI' ) && WP_CLI ) { class My_Custom_CLI_Command { /** * 示例子命令:输出问候语 * * @param array $args 位置参数 * @param array $assoc_args 关联参数 */ public function greet( $args, $assoc_args ) { $name = isset( $args[0] ) ? $args[0] : 'Guest'; WP_CLI::success( "Hello, {$name}!" ); } } // 注册命令,主命令名为`my-cli`,对应上面的类 WP_CLI::add_command( 'my-cli', 'My_Custom_CLI_Command' ); }
关键注意点:
- 必须用
defined('WP_CLI') && WP_CLI包裹代码,避免在Web环境下加载 - 类名与
WP_CLI::add_command的第二个参数必须完全匹配 - 子命令对应类中的公共方法
3. 直接指定WP-CLI加载命令文件(可选,无需激活插件)
如果不想依赖插件激活状态,可通过wp-cli.yml强制WP-CLI加载命令文件:
在本地挂载的wordpress目录下创建wp-cli.yml文件(该目录对应容器内/var/www/html),内容如下:
require: - wp-content/plugins/your-plugin-slug/your-command-file.php
保存后,WP-CLI每次运行都会自动加载指定的命令文件。
4. 验证自定义命令
执行以下命令测试自定义命令:
docker exec site-cli wp my-cli greet # 或带参数 docker exec site-cli wp my-cli greet "John"
如果输出成功提示,说明命令已正常注册。
内容的提问来源于stack exchange,提问作者SebastianOpperman
相关产品推荐
相关产品推荐

