WordPress没有CI4的layout.php和yield()机制,其模板拆分依靠get_header()、get_footer()、get_template_part()等函数实现物理文件分离与组合,而非视图继承。

CI4(CodeIgniter 4)和 WordPress 是两套完全不同的系统,WP 没有“CI4布局模板拆分”这种写法——这属于概念混淆。WordPress 的模板机制基于 PHP 文件层级匹配(Template Hierarchy),不涉及 CI4 那类 MVC 框架的视图继承或 layout 拆分逻辑。
WordPress 不用 CI4 那套 layout.php + yield() 方式
WordPress 主题里没有 layout.php、yield('content') 或 @extends 这类 Blade/CI4 语法。它靠的是:
-
函数调用复用:比如
get_header()、get_footer()、get_sidebar()加载公共区块 -
模板部件复用:用
get_template_part('template-parts/content', 'archive')拆出可复用模块 -
条件加载逻辑:配合
is_category()、is_page_template()等判断,动态引入不同结构
想实现类似 CI4 的“主布局+内容区”效果?这样写
在自定义模板(如 page-custom.php)中,你可以模拟 layout 思路,但必须用 WordPress 原生方式:
- 顶部统一调用
get_header('custom')—— 加载header-custom.php - 主体用标准循环:
while (have_posts()) : the_post(); ... endwhile; - 内容区域可再拆:比如
get_template_part('template-parts/section', 'hero')或get_template_part('template-parts/section', 'features') - 底部统一调用
get_footer('custom')—— 加载footer-custom.php
避免“嵌套过深”的实际建议
不是文件层级多就叫“过深”,关键看逻辑是否清晰、维护是否方便:
- 别把所有 HTML 堆进
index.php,按区块拆到template-parts/目录下 - 每个
get_template_part()调用只负责一个语义单元(如 banner、card-list、cta-section) - 避免在模板里写复杂 PHP 逻辑,把数据处理移到
functions.php或自定义函数中 - 不用嵌套五层
get_template_part(),三层以内较合理(header → section → item)
本质上,WordPress 的“拆分”是物理文件分离 + 函数组合,不是 CI4 那种视图继承。搞清这个区别,就不会强行套用 CI4 写法导致主题无法运行或难以调试。

















