When we upgrade from 5.0.4 to 5.1.1 the site stops loading.

The error message is

Fatal error:  Uncaught Error: Call to a member function images_path() on null 
/wp-content/themes/mytheme/header.php on line 49

Line 49 is
<?php $theme->images_path(); ?>

above it in the same file is
global $theme;

$theme is created in functions.php as the instance of our custom theme.

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();

I don’t know how to troubleshoot this issue. Everything worked great prior to the upgrade and no other changes were made to the site.

Any help appreciated.

2 s
2

Since Changeset 44524, which has landed in WordPress 5.1, the variable $theme is now a global variable set by WordPress which also gets unset 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 );

This means that any value set by your theme gets also unset.

To fix the fatal error you now have to replace all variables named $theme with a prefixed version, for example $my_theme. Prefixing variables and functions in global scope is considered best practice to avoid such issues.

Leave a Reply

Your email address will not be published. Required fields are marked *