单页面 HTML
先把结构、样式和脚本分离;不必过早设计复杂目录。
style.css + main.js打开运行示例 ↗从第一个 HTML 页面,到多页面复用,再到 WordPress 经典主题。把 CSS / JavaScript 的放置、加载、依赖和验收变成可以重复使用的规范。
支持在当前页面定位关键词,按 Enter 跳转到第一个匹配模块。
先把结构、样式和脚本分离;不必过早设计复杂目录。
style.css + main.js打开运行示例 ↗公共样式和逻辑复用,页面专属 CSS / JS 按需加载。
common.* + pages/*打开运行示例 ↗尽量保留 CSS / JS 代码,把资源加载交给 enqueue 管理。
inc/enqueue.php查看主题源码 ↗阶段 02 和阶段 03 使用相同的 CSS / JS 文件;差异主要在页面模板和加载机制。WordPress PHP 模板不能通过静态 GitHub Pages 直接运行。
project/
├── index.html
└── assets/
├── css/style.css
└── js/main.jsassets/
├── css/
│ ├── common.css
│ └── pages/
│ ├── home.css
│ ├── products.css
│ └── contact.css
└── js/
├── common.js
└── pages/
├── home.js
├── products.js
└── contact.js
# 未来使用第三方库时可增加:
assets/vendor/
└── swiper/common.*;只有某一页需要的逻辑,留在 pages/*。不存在的功能不必创建空文件。assets/vendor/ 是未来可选目录,并非当前仓库已有资源。| 方式 | 主要行为 | 推荐用途 |
|---|---|---|
<link rel="stylesheet"> | 加载样式表,可能阻塞渲染 | 主要 CSS 文件 |
<script defer> | 经典脚本下载可并行,解析完成后按文档顺序执行 | 常规独立文件默认优先 |
<script async> | 就绪后执行,不保证与其他脚本的顺序 | 无顺序依赖的独立脚本 |
<script type="module"> | 模块支持 import,默认延后执行 | ES Modules 项目 |
wp_enqueue_script() | WordPress 统一处理依赖、版本及加载位置/策略 | WordPress 经典主题 |
<head>
<link rel="stylesheet" href="assets/css/common.css">
<link rel="stylesheet" href="assets/css/pages/home.css">
<script src="assets/js/common.js" defer></script>
<script src="assets/js/pages/home.js" defer></script>
</head>defer 的顺序保证适用于普通经典外部脚本;混合 async、module、动态注入、优化插件时应重新核对执行关系。多个依赖应显式声明,而非依靠偶然顺序。优化插件可能改写脚本输出,务必在启用优化后验证实际执行顺序。| 页面 | 全站公共资源 | 页面专属资源 |
|---|---|---|
| Home | common.css / common.js | home.css / home.js |
| About | common.css / common.js | 不需要 |
| Products | common.css / common.js | products.css / products.js |
| Contact | common.css / common.js | contact.css / contact.js |
这是仓库现有多页面示例的资源关系,不是要求所有真实网站都使用这四类页面。页面数量和内容类型变化时,应根据实际职责调整。
将资源集中到 inc/enqueue.php,由 functions.php 引入。下方代码摘自仓库演示并经过局部裁剪;切换标签查看各类写法。以下使用 strategy 的示例要求 WordPress 6.3+;旧版第五参数 true 只代表页脚加载,并不等于 defer。
handle 是资源唯一句柄;deps 声明依赖;版本号用于缓存管理。wp_enqueue_style() 的可选第 5 参数 $media 默认是 all,按需可用 screen 或 print。演示项目使用 filemtime(),生产环境可以采用发布版本或构建哈希。get_theme_file_uri() / get_theme_file_path() 会优先查找子主题文件,缺失时回退父主题;两者应配套使用。上述固定 slug 判断只用于教学。真实多语言网站可以根据模板、is_page_template()、内容类型或可靠的业务条件改造。enqueue 的句柄去重并不会自动识别两个不同 URL 是否指向同一个库。
不在多个 PHP 模板或页头页脚重复写同一个库的 URL。
记录外部库实际版本;升级之前先验证兼容性。
例如使用 Swiper 的页面脚本要等 Swiper 库就绪后再执行。
并非所有页面都需要轮播、弹窗或动画脚本。
// 前提:已安装对应版本的 Swiper 文件;在 wp_enqueue_scripts 回调内执行。
wp_register_script(
'my-swiper',
get_theme_file_uri('assets/vendor/swiper/swiper-bundle.min.js'),
[],
'11.x', // 示例值:替换为实际安装版本
['in_footer' => true, 'strategy' => 'defer']
);
wp_enqueue_script('my-swiper');
wp_enqueue_script(
'site-slider',
get_theme_file_uri('assets/js/pages/slider.js'),
['my-swiper'],
'1.0.0',
['in_footer' => true, 'strategy' => 'defer']
);!important 或反复改脚本。!important 来掩盖问题。xxx is not a function?Cannot read properties of null (reading 'addEventListener')?按当前项目逐项勾选。本设备浏览器会保存勾选状态;切换项目时建议重置。
现代构建工具(Vite / Webpack)可以通过构建产物及 manifest 接入 WordPress,但不属于本仓库当前三阶段演示范围。
遇到更复杂的业务需求,优先回看真实源码与验收文档,确认当前模式是否适用,再决定是否扩展。