从5.0.4升级到5.1.1会导致$THEME为空

时间:2019-04-09 作者:BishopZ

当我们从5.0.4升级到5.1.1时,站点停止加载。

错误消息为

Fatal error:  Uncaught Error: Call to a member function images_path() on null 
/wp-content/themes/mytheme/header.php on line 49
第49行是<?php $theme->images_path(); ?>

在同一文件中,它的上方是global $theme;

$主题在函数中创建。php作为自定义主题的实例。

class MyTheme {
  private $theme_name = "MyTheme";
  private $scripts_version = \'0.90\';

  function __construct() {
    add_action(\'init\', array($this, \'init_assets\'));
    ...several of these
  ...more methods
  }
}
...other stuff
$theme = new MyTheme();
我不知道如何解决这个问题。在升级之前,一切都很好,没有对站点进行其他更改。

感谢您的帮助。

2 个回复
最合适的回答,由SO网友:ocean90 整理而成

自从Changeset 44524, 已登录WordPress 5.1,变量$theme 现在是WordPress设置的全局变量,该变量也会被取消设置after the themes have been bootstrapped:

// Load the functions for the active theme, for both parent and child theme if applicable.
foreach ( wp_get_active_and_valid_themes() as $theme ) {
    if ( file_exists( $theme . \'/functions.php\' ) ) {
        include $theme . \'/functions.php\';
    }
}
unset( $theme );
这意味着主题设置的任何值也会被取消设置。

要修复致命错误,现在必须替换所有名为$theme 例如,带有前缀的版本$my_theme. 在全局范围内为变量和函数添加前缀被认为是避免此类问题的最佳做法。

SO网友:Nicolai Grossherr

始终检查保留项和全局变量以避免可能的冲突。

可在WordPress Codex上找到概述:

相关推荐

Running WP_Upgrader via Cron

我编写了在页面运行时更新核心的代码。当我通过管理挂钩使用代码时,一切都正常admin_init 但当我将其添加到cron函数或通过任何前端挂钩运行它时,它不起作用(致命错误)init 或template_redirect 等因此,我试图要求class-wp-upgrader.php 文件add_action(\'init\', \'kit_wp_auto_update\'); // doesn\'t work // add_action(\'admin_init\', \'kit_wp_auto_