现代 WordPress 开发已经不能仅仅依靠 FTP 上传文件了。使用版本控制(Git)、依赖管理(Composer)和自动化部署工具,可以大幅提高开发效率和代码安全性。这套流程让团队协作更顺畅,也让代码发布变得可预测、可回滚。

Git 是版本控制的核心。WordPress 项目的 Git 仓库通常只包含主题和自定义插件,而不包含 WordPress 核心和第三方插件(这些由 Composer 管理)。一个标准的 .gitignore 文件应该排除以下内容:

wp-config.php
/wp-content/upgrade/
/wp-content/uploads/
/wp-content/plugins/
/wp-content/themes/(保留你自己的主题)
/vendor/
/node_modules/
.env
.idea/
*.sql
*.log

将 WordPress 核心排除在 Git 之外,可以保持仓库轻量,也便于以后通过 Composer 更新核心。

Composer 管理 PHP 依赖 是 WordPress 开发的主流方式。通过 composer.json 文件,你可以声明 WordPress 核心、第三方插件、以及开发工具(如 PHPUnit、WP-CLI、PHP_CodeSniffer)的版本:

{
    "require": {
        "johnpbloch/wordpress": "^6.0",
        "wpackagist-plugin/woocommerce": "^7.0",
        "wpackagist-plugin/akismet": "^4.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^9.0",
        "squizlabs/php_codesniffer": "^3.0"
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://wpackagist.org"
        }
    ],
    "extra": {
        "wordpress-install-dir": "wp"
    }
}

wpackagist.org 是 WordPress 官方插件的 Composer 镜像,让你可以像安装普通 PHP 包一样安装 WordPress 插件。运行 composer install 后,WordPress 核心会安装在 wp/ 目录,插件安装在 wp-content/plugins/

部署流程 可以从手动 FTP 升级为自动化部署。常见的部署工具包括 Deployer、Capistrano、以及基于 CI/CD 管道的方案(如 GitHub Actions)。

Deployer 是一个用 PHP 编写的部署工具,配置文件 deploy.php 定义了部署步骤:

namespace Deployer;
require 'recipe/common.php';

set('repository', 'git@github.com:你的项目.git');
set('keep_releases', 5);

host('你的服务器IP')
    ->set('deploy_path', '/var/www/你的网站');

task('deploy', [
    'deploy:info',
    'deploy:prepare',
    'deploy:lock',
    'deploy:release',
    'deploy:update_code',
    'deploy:vendors',
    'deploy:writable',
    'deploy:symlink',
    'deploy:unlock',
    'cleanup',
    'success'
]);

after('deploy:failed', 'deploy:unlock');

执行 dep deploy 后,Deployer 会 SSH 到服务器,从 Git 拉取最新代码,安装 Composer 依赖,创建符号链接,实现零停机部署。

环境配置分离 是部署中重要的一环。不同环境(本地、测试、生产)需要不同的配置,比如数据库连接、API 密钥、调试模式。推荐使用环境变量或 .env 文件来管理这些差异。vlucas/phpdotenv 是在 WordPress 中广泛使用的环境变量管理库。

在 wp-config.php 中读取环境变量:

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
define('DB_NAME', $_ENV['DB_NAME']);
define('DB_USER', $_ENV['DB_USER']);
define('DB_PASSWORD', $_ENV['DB_PASSWORD']);

在服务器上创建 .env 文件,包含了所有敏感信息,该文件不应提交到 Git 仓库。

数据库迁移 是部署中另一个需要关注的环节。如果你在代码中修改了数据库结构,需要编写迁移脚本。可以使用 wp db 命令执行 SQL 脚本,或者使用 Migrate DB 这类工具。

零停机部署 的最佳实践包括:在部署期间将网站设置为维护模式,部署完成后再恢复。Deployer 可以通过 deploy:writable 任务设置文件权限。对于高流量网站,还可以考虑使用负载均衡器,逐个节点更新。

版本控制和自动化部署是现代开发流程的基石。这套流程从代码编写到上线发布,全程可追溯、可回滚,大幅降低了人为失误的风险。对于团队协作项目,这套流程是必备的。