You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题原因

  1. 动态属性弃用:PHP 8.2及以上版本禁止给类动态添加未声明的属性,旧版Timber的Integrations.php中直接给TimberIntegrations类添加$wpml属性,触发弃用提示。
  2. 头部已发送:弃用警告的输出早于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:13:32