不能。wordpress 官方不提供 composer install 可直接安装的核心包,推荐使用 johnpbloch/wordpress;插件需配置 wpackagist 仓库和 composer/installers 映射路径至 wp-content/plugins/。

composer install 能不能直接装 WordPress 核心
不能。WordPress 官方不提供 composer/install 可直接拉取的稳定版核心包(如 wordpress/wordpress 是社区维护的镜像,非官方支持)。直接运行 composer create-project wordpress/wordpress 会失败或拉到空壳,因为官方未将核心打包为 Composer 可识别的 type: project 包。
正确做法是用 wp-cli 或手动下载 + composer require 管理依赖,把 WordPress 当作「项目根目录下的一个依赖」来组织,而不是靠 Composer 自动安装整个站点。
- 推荐使用
johnpbloch/wordpress—— 这是目前最稳定的第三方 WordPress 核心包,自动同步官方发布,type: webroot,专为 Composer 集成设计 - 不要用
wordpress/wordpress(已弃用)或roots/wordpress(仅限 Bedrock 架构,强约定目录结构) - 执行
composer require johnpbloch/wordpress后,核心文件默认放在vendor/johnpbloch/wordpress,需额外配置 Web 服务器指向web/或public/目录
怎么用 composer require 安装 WordPress 插件
绝大多数插件已发布到 Packagist,只要作者提交了 composer.json 并设对 type: wordpress-plugin,就能直接 require。
例如安装 advanced-custom-fields-pro(需 license key)或开源插件 query-monitor:
composer require wpackagist-plugin/query-monitor
注意:wpackagist-plugin/ 是 WPackagist 提供的自动同步命名空间,不是官方源,但覆盖超 5 万款插件。
- 必须先在
composer.json中添加仓库配置:"repositories": [{"type": "composer", "url": "https://wpackagist.org"}] - 插件实际安装路径默认为
wp-content/plugins/,但 Composer 不会自动创建该目录 —— 你得自己确保路径存在,或用installer-paths自定义(见下一条) - 有些插件(如
woocommerce)有子依赖,require后可能触发额外 autoload,检查vendor/autoload.php是否被正确引入
如何让 composer install 插件到 wp-content/plugins 而不是 vendor/
Composer 默认把所有包装进 vendor/,但 WordPress 插件必须出现在 wp-content/plugins/ 才能被识别。靠 composer/installers 插件重定向安装路径。
先装基础支持:
composer require composer/installers
再在 composer.json 的 extra 段声明路径映射:
"extra": {
"installer-paths": {
"wp-content/plugins/{$name}/": ["type:wordpress-plugin"],
"wp-content/themes/{$name}/": ["type:wordpress-theme"]
}
}
- 这个配置只对声明了
"type": "wordpress-plugin"的包生效,不是所有插件都规范填写了 type,遇到不生效的包,查它的composer.json源码确认 -
{$name}是包名(如wpackagist-plugin/akismet→ 目录为wp-content/plugins/akismet/),不是插件显示名 - 如果项目已有
wp-content目录且权限受限,composer install可能因写入失败中断,建议提前chown或用sudo(不推荐生产环境)
为什么 composer update 后插件没更新到 wp-content 下
常见现象:改了 composer.json 里的插件版本号,运行 composer update wpackagist-plugin/seo-by-rank-math,但 wp-content/plugins/ 里文件没变。
根本原因是:Composer 的安装路径逻辑只在 install 或 update **首次写入**时触发;如果目标目录已存在同名文件夹,它默认跳过复制(尤其当 installer-paths 规则匹配但目录非空时)。
- 安全起见,Composer 不会覆盖已有插件目录 —— 即使你删了
composer.lock,它也只更新vendor/和composer.lock,不动wp-content - 临时解法:手动删掉
wp-content/plugins/插件名,再跑composer update - 长期解法:加脚本钩子,在
post-update-cmd里用rsync或cp强制同步(但要注意排除.git、vendor/等敏感子目录) - 更稳的做法是把
wp-content放进 Git 忽略,每次部署走composer install --no-dev+ 清空插件目录 + 重装,避免本地残留干扰










