直接 composer create-project wordpress/wordpress 不适合生产环境,因其将核心、主题、插件混入web目录,导致升级覆盖、Git混乱、部署不可控、wp-content变更难隔离;Roots Bedrock通过Composer管理依赖、Git管理内容解决该问题。

为什么直接 composer create-project wordpress/wordpress 不适合生产环境
因为默认方式把 WordPress 核心、主题、插件全塞进 web/ 或根目录,和代码混在一起。升级时容易覆盖自定义文件,Git 提交混乱,部署时没法精确控制核心版本,也难以隔离 wp-content 的变更。
Roots Bedrock 就是为解决这个来的:它把 WordPress 拆成「可锁定的依赖」+「可版本化的站点内容」,用 Composer 管理核心和插件,用 Git 管理主题和配置。
常见错误现象:composer update 后 wp-content/plugins/ 里手动放的插件被清空;或者 wp-config.php 被覆盖导致数据库连不上。
- Bedrock 把
wp-content移到项目根目录下,重命名为content/,再通过常量指向它 -
wp-core被声明为require依赖,版本锁在composer.lock中,升级可控 - 插件和主题统一走
require(如roots/wp-password-bcrypt),不手动丢进目录
如何初始化一个 Bedrock 项目(不是 clone,而是正确安装)
别直接 git clone bedrock 仓库——那只是骨架,缺关键的 Composer 初始化逻辑。正确做法是用 Roots 官方推荐的 create-project 命令:
composer create-project roots/bedrock my-wordpress-site
这条命令会自动:生成标准目录结构、安装 wp-core 到 vendor/、设置 web/index.php 入口、写好 content/ 映射逻辑。
容易踩的坑:
- 运行后没看到
web/目录?检查当前目录是否有写权限,或是否被旧的composer.json干扰 - 执行完访问首页报
Call to undefined function wp()?大概率是 web 服务器没把 DocumentRoot 指向web/,而不是项目根目录 - 想换 PHP 版本?Bedrock 默认要求
^8.0,若用 PHP 7.4 会装不上,需先改composer.json里的config.platform.php
怎么安全地添加插件和主题(不是下载 zip 再解压)
所有第三方扩展必须走 Composer require,否则 Bedrock 的自动加载、更新隔离、路径映射就失效了。例如要加 Advanced Custom Fields Pro:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
先确认它是否支持 Composer 安装——ACF Pro 官方不提供 packagist 包,但可以用 composer/installers + 自定义 repo 方式接入。更稳妥的是选已上 Packagist 的替代品,比如 advanced-custom-fields/advanced-custom-fields-pro(需配私有 repo 和 auth.json)。
通用流程:
- 查插件是否在 Packagist 上,搜
wordpress-plugin/xxx或wp-xxx - 如果支持,直接
composer require wpackagist-plugin/woocommerce(注意 wpackagist 是社区镜像,非官方) - 主题同理:
composer require wpackagist-theme/twentytwentythree - 装完后,插件实际在
vendor/下,Bedrock 的content/plugins/是符号链接或通过installer-paths规则复制过来的
性能影响:用符号链接方式(Bedrock 默认)几乎无开销;用复制方式(某些定制配置)会导致 composer install 变慢,且 vendor/ 和 content/ 内容不一致风险上升。
为什么 wp-config.php 要拆成 .env + config/application.php
因为 Bedrock 把敏感配置(DB 主机、密码、密钥)从 PHP 文件里抽出来,放到 .env,再由 vlucas/phpdotenv 加载。这样就能把 wp-config.php 完全交给版本控制,而 .env 忽略掉,不同环境用不同值。
常见错误现象:PHP Fatal error: Uncaught Dotenv\Exception\InvalidPathException —— 通常是 .env 文件不存在,或权限不对(不能是 600,得是 644 才能被 Web 用户读取)。
实操要点:
-
.env必须放在项目根目录(composer.json同级),不是web/下 - 密钥生成别手写,用
wp dotenv init --with-env(需安装wp-cli/wp-cli-bundle)或直接访问 https://www.php.cn/link/f8e8ce58b493febecbbf3c12b18353dc 复制 - 如果本地开发用 SQLite,得额外装
aaemnnosttv/wp-cli-sqlite并在config/application.php里判断WP_ENV切换 DB 驱动
兼容性要注意:某些托管环境(如 SiteGround、WP Engine)不支持 .env,得回退到传统 wp-config.php 注入逻辑,这时 Bedrock 的优势就打折扣了。

















