跳到主要内容

Sage 11 + Acorn 5 主题开发:从零到第一个 Hello World

Sage 11 + Acorn 5 主题开发:从零到第一个 Hello World

这篇教程带你完整搭建一个 Sage 11 主题,最终能跑通:

  • Vite 8 + Tailwind 4 + Blade 模板
  • Composer + npm 双包管理
  • 主题激活后能正常显示「Hello World」

前置环境

# Linux (Ubuntu 22.04)

php -v # 8.1+

node -v # 20+

npm -v # 10+

composer --version

mysql --version # 5.7+ / 8.0+

Sage 11 最低要求 PHP 8.1,建议 PHP 8.2。我自己用 8.2 跑得很稳。

创建 WordPress 站点

如果还没有 WP 站点,先装一个。最快的方式用 BT 面板(或者手动装 LNMP)。

手动装的话:

# 1. 下载 WordPress

cd /www/wwwroot/

wget https://wordpress.org/latest.tar.gz

tar xzf latest.tar.gz

mv wordpress your-site.com

2. 创建数据库

mysql -uroot -p

CREATE DATABASE wp_yoursite DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD';

GRANT ALL ON wp_yoursite. TO 'wp_user'@'localhost';

FLUSH PRIVILEGES;

EXIT;

3. 配置 wp-config.php

cd your-site.com

cp wp-config-sample.php wp-config.php

修改 DB_NAME, DB_USER, DB_PASSWORD

访问 https://your-site.com 完成安装向导

安装 Sage 11 主题

Sage 11 用 Composer 创建项目,会自动把所有 PHP 依赖装好:

cd /www/wwwroot/your-site.com/wp-content/themes/

composer create-project roots/sage your-theme-name

cd your-theme-name

npm install

这一步会装:

  • roots/sage 主包
  • roots/acorn Laravel 容器(5.0.0-beta.2)
  • illuminate/ Laravel 组件
  • composer/installers 让 vendor 装到正确位置

第一次启动 Vite 开发服务器

npm run dev

你会看到 Vite 输出:

  VITE v8.x.x  ready in xxx ms

➜ Local: http://localhost:5173/

➜ Network: http://your-ip:5173/

Vite 开发服务器在生产站点下访问不到。Sage 11 的设计是:开发时用 Vite HMR,生产时 build 到 public/build/ 然后让 nginx 服务。

配置 nginx(生产模式)

/www/server/panel/vhost/nginx/your-site.com.conf 加一段:

# Sage 11 build assets 路由

location ^~ /app/themes/your-theme-name/public/build/ {

expires 30d;

add_header Cache-Control "public, max-age=2592000";

access_log off;

}

第一个生产构建

npm run build

输出:

public/build/

├── manifest.json

├── assets/

│ ├── app-XXX.css # 主样式

│ ├── app-XXX.js # 主脚本

│ └── theme.json # Tailwind 主题变量

激活主题

进 wp-admin → 外观 → 主题,启用「旅买爱 LVmaai Theme」(或你的主题名)。

激活后访问首页,你应该能看到默认的「Hello World」。

Acorn 5 vendor patch(重要)

Acorn 5.0.0-beta.2 跟 Vite 8 不兼容,必须打 patch。我之前踩过这两个坑:

Patch 1: Manifest 格式兼容

vendor/roots/acorn/src/Roots/Acorn/Assets/Manifest.php 第 47 行:

$value = $manifest[$key] ?? null;

if (is_array($value)) {

$value = (object) $value;

}

Vite 8 的 manifest 把所有值都包成对象,原版代码会失败。

Patch 2: asset() 函数覆盖绕过

vendor/roots/acorn/src/Roots/Acorn/Assets/Vite.php 第 917 行附近。如果你的 globals.php 重定义了 asset() 函数,会让 Acorn 拿不到 Asset 对象(返回字符串)。

详细的 patch 文件和 reapply 脚本都存在 patches/ 目录:

bash patches/reapply.sh   # 在 composer update 后跑

验证一切正常

进 wp-admin → 主题设置 → 检查 47 个字段是否都能保存。

自研设置面板示例

Sage 默认没设置面板,但 Acorn 让我们能用 WordPress Settings API + Blade 自研一个。这是阶段 2 的核心工作,代码量约 600 行。

简单说就是:

// app/Settings/SettingsPage.php

public static function register(): void {

add_action('admin_menu', [self::class, 'addMenu']);

add_action('admin_init', [self::class, 'registerSettings']);

}

public static function schema(): array {

return [

'branding' => [

'title' => '品牌 & 视觉',

'fields' => [

['key' => 'logo_id', 'label' => '站点 Logo', 'type' => 'image'],

['key' => 'primary_color', 'label' => '主色', 'type' => 'color'],

],

],

// ...

];

}

然后用 View Composer 注入到所有前台 Blade 视图:

// app/View/Composers/Settings.php

protected static $views = ['*'];

public function with(): array {

return \App\Settings\Options::all();

}

这样所有 Blade 文件都能用 $logoUrl$primaryColor 等变量。

调试技巧

1. Acorn 缓存卡住

如果改完代码页面没生效:

wp acorn optimize:clear

/etc/init.d/php-fpm-82 reload

2. Blade 编译报错

打开 WP_DEBUG_LOG 看具体错误:

// wp-config.php

define('WP_DEBUG', true);

define('WP_DEBUG_LOG', true);

define('WP_DEBUG_DISPLAY', false); // 关键:不要 true,否则 warning 会变 500

3. Vite manifest 找不到

每次 build 后必须同步 manifest:

cp public/build/manifest.json public/manifest.json

我把这个写进了 build.sh

#!/usr/bin/env bash

npx vite build

cp public/build/manifest.json public/manifest.json

chown -R www:www public/ resources/

总结

Sage 11 + Acorn 5 是目前 WordPress 主题开发的最佳现代栈。配合 Vite 8 + Tailwind 4,开发体验接近 Laravel/Vue 项目,但保留 WordPress 生态的所有好处。

接下来你可以做:

  • 阶段 3:自定义文章类型(CPT)+ Meta Box
  • 阶段 4:主题设置面板
  • 阶段 5:会员/付费
  • 阶段 6:API + Headless

下一篇讲 Vite 8 在 WordPress 主题里的配置优化。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注