Ein Upgrade von 5.0.4 auf 5.1.1 führt dazu, dass $ theme null ist

7

Wenn wir ein Upgrade von 5.0.4 auf 5.1.1 durchführen, wird die Site nicht mehr geladen.

Die Fehlermeldung lautet

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

Zeile 49 ist <?php $theme->images_path(); ?>

darüber in der gleichen Datei ist global $theme;

$ theme wird in functions.php als Instanz unseres benutzerdefinierten Themas erstellt.

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

Ich weiß nicht, wie ich dieses Problem beheben soll. Vor dem Upgrade hat alles hervorragend funktioniert und es wurden keine weiteren Änderungen an der Site vorgenommen.

Jede Hilfe geschätzt.

BishopZ
quelle
1
Welcher zugehörige Code existiert vor Zeile 49? In functions.php definierte Variablen sind in Vorlagendateien nicht automatisch verfügbar. Angenommen, Sie haben $ theme in $ lp_theme umbenannt, sollten Sie wahrscheinlich ein tun, global $lp_theme;bevor Sie versuchen, es zu verwenden.
Anastis

Antworten:

12

Seit Changeset 44524 , das in WordPress 5.1 gelandet ist, ist die Variable $themenun eine von WordPress festgelegte globale Variable, die auch nach dem Bootstrapping der Themes deaktiviert wird :

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

Dies bedeutet, dass alle von Ihrem Thema festgelegten Werte ebenfalls nicht festgelegt werden.

Um den schwerwiegenden Fehler zu beheben, müssen Sie jetzt beispielsweise alle benannten Variablen $themedurch eine vorangestellte Version ersetzen $my_theme. Das Präfixieren von Variablen und Funktionen im globalen Bereich wird als bewährte Methode angesehen, um solche Probleme zu vermeiden.

ocean90
quelle
Ich habe in meiner Instanz immer noch keine Lösung gefunden, aber wir haben einige Einzeltests des Problems durchgeführt, und Sie sind genau über die Ursache und die Lösung informiert. Bravo
BishopZ
1

Suchen Sie immer nach reservierten Begriffen und globalen Variablen, um mögliche Konflikte zu vermeiden.

Eine Übersicht finden Sie im WordPress Codex:



Hinweis: Diese Listen sind möglicherweise nicht immer zu 100% aktuell. Daher ist die Überprüfung der Version des von Ihnen verwendeten Quellcodes die einzige Möglichkeit, um 100% sicher zu sein.

Nicolai
quelle