Timber WordPress初始化遇header已发送及动态属性弃用问题求助
Timber在Bedrock WordPress环境初始化时的报错解决
问题背景
已完成以下操作:
- 通过
composer require timber/timber安装Timber - 在主题目录创建
mytheme文件夹,包含仅含基础主题信息的style.css(/* Theme Name: mytheme */)、functions.php和index.php - 主题直接激活正常,但执行
$timber = new Timber();时出现两类错误:- 弃用警告:
Deprecated: Creation of dynamic property TimberIntegrations::$wpml is deprecated in ... \vendor\timber\timber\lib\Integrations.php on line 33 - 头部信息修改失败警告(多条):涉及
wp-admin/includes/misc.php、wp-includes/functions.php等文件,提示Cannot modify header information - headers already sent by ... Integrations.php:33
- 弃用警告:
问题原因
- 动态属性弃用:PHP 8.2及以上版本禁止给类动态添加未声明的属性,旧版Timber的
Integrations.php中直接给TimberIntegrations类添加$wpml属性,触发弃用提示。 - 头部已发送:弃用警告的输出早于WordPress发送HTTP头部的时机,导致后续设置头部的操作失败,引发一系列警告。
解决方法
1. 升级Timber到兼容PHP 8.2+的版本
旧版Timber未适配PHP 8.2的属性声明规则,执行以下命令升级:
composer update timber/timber --with-all-dependencies
升级后,Timber会在TimberIntegrations类中明确声明$wpml属性,解决动态属性弃用问题。
2. 调整Timber初始化时机
不要在functions.php的顶级作用域直接初始化Timber,挂钩到after_setup_theme动作,确保在WordPress完成核心初始化后执行:
// functions.php 中的正确初始化代码 add_action('after_setup_theme', function() { $timber = new Timber(); });
这种写法能避免过早执行代码导致的输出提前问题,从根源解决头部已发送警告。
3. 临时处理:调整错误输出设置(开发环境)
如果需要临时规避头部警告,可在Bedrock的config/application.php中修改调试设置,将错误写入日志而非直接输出:
define('WP_DEBUG', true); define('WP_DEBUG_DISPLAY', false); define('WP_DEBUG_LOG', true);
注意:这只是临时方案,核心解决还是升级Timber。
内容的提问来源于stack exchange,提问作者Anatis2
相关产品推荐
相关产品推荐

