composer require 直接装 wordpress 插件常失败,因 packagist 不收录插件且机制不兼容;需用 wpackagist.org 仓库、正确 type(如 wpackagist-plugin)、配置 extra.installer-paths 指向 wp-content/plugins/,并确保路径存在、权限正确、主文件头规范及依赖激活有序。
为什么 composer require 直接装 WordPress 插件经常失败
因为官方 Packagist 不收录 WordPress 插件,wp-cli 和 wp-admin 的插件安装机制和 Composer 完全不兼容——前者靠 ZIP 下载+文件解压+激活钩子,后者依赖 composer.json 中的 autoload、type、installer-paths 等元信息。直接 composer require wpackagist-plugin/akismet 看似能成功,但实际不会生成可运行的插件目录结构,也不会触发 WordPress 的插件加载逻辑。
- WPackagist 是社区维护的镜像源,它把 WordPress.org 插件页“翻译”成 Composer 可识别的包定义,但不改变 WordPress 本身的加载规则
- 必须配合
wpackagist.org作为仓库 + 正确的type(如wpackagist-plugin)+ 自定义installer-paths - 如果没配
installer-paths,插件会被装进vendor/下,WordPress 根本找不到
怎么让 composer install 把插件放到 wp-content/plugins/
靠 composer.json 里的 extra.installer-paths 告诉 Composer:“这些 type 的包,别放 vendor,往这儿扔”。这是最常漏掉、也最影响结果的一环。
- 在
composer.json的extra字段下加:
"installer-paths": {
"wp-content/plugins/{$name}/": ["type:wpackagist-plugin"],
"wp-content/themes/{$name}/": ["type:wpackagist-theme"]
}
{$name} 是插件原始 slug(比如 advanced-custom-fields-pro),不是包名(wpackagist-plugin/advanced-custom-fields-pro)wp-content/plugins/ 路径,否则 Composer 会静默失败或报错 Could not create directory
web/app/plugins/{$name}/,对应改写 installer-paths
wpackagist-plugin/ 包名怎么查?别手敲
WPackagist 不是所有插件都实时同步,也不是所有版本都保留。手动拼包名极易出错:大小写、连字符、pro 后缀、语言变体(如 polylang vs polylang-pro)全得对上,否则 composer require 找不到包。