Upgrade from 5.0.4 to 5.1.1 causes $theme to be null

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 Comment