it-swarm.com.de

Gültigkeitsbereich der WordPress Theme-Variablen

Ich muss eine Variable erstellen, auf die in allen WordPress Theme-Vorlagendateien (index.php, header.php usw.) zugegriffen werden kann. Ich weiß, dass Funktionsdefinitionen in der functions.php-Vorlagendatei (in Ihrem Themenpfad) enthalten sind, aber für Variablen gibt es so etwas nicht.

Zum Beispiel muss ich ständig Kategorien in meinem Thema abrufen, damit ich diese von überall in meinem Thema zugänglich haben möchte:

$categories = get_categories(); /* get_categories() is a wordpress function */ 

Auf diese Weise kann ich einfach auf zugewiesene Daten zugreifen, ohne sie jedes Mal neu zuweisen zu müssen, wenn ich meine Kategorien abrufen muss.

Leider funktioniert das Hinzufügen dieses Codeteils in meiner functions.php -Datei nicht, und die Variable global wird auch nicht erstellt.

8
Luca Matteis

Anscheinend macht global den Trick. Das Problem war, dass meine Variable $categories in jeder Vorlage, die ich verwenden musste, neu definiert mit einem global davor hätte sein müssen.

5
Luca Matteis

Dominic (weiß nicht, wie er seiner Antwort eine Notiz hinzufügen soll):

define akzeptiert nur Skalare, daher konnten Sie define( CATS, get_categories() ); nicht ausführen und auch nicht

$categories = get_categories();
define( CATS, $categories );

Andernfalls funktioniert define einwandfrei und ist für Skalare in der Tat sicherer (da Sie sicher sein können, dass die Konstanten nicht überschrieben werden können).

1
fritzfromlondon

Das funktioniert auch:

in functions.php füge define('TEST', 'this is a test'); hinzu
und in deiner header.php oder was auch immer echo TEST;

Gibt es einen Leistungsvorteil für eine Methode gegenüber einer anderen?

0
Dominic

Ich weiß, dass dieser wirklich alt ist, aber es gibt Raum für Verbesserungen.

Sie sollten in Betracht ziehen, $ GLOBALS ['categories'] anstelle von nur global zu verwenden.

Dafür gibt es zwei Gründe:

  1. Wir müssen nicht jedes Mal global $categories; schreiben.
  2. Es ist glasklar, wenn wir global verwenden und dann nicht.

Betrachten Sie diesen Code:

global $categories;

// a lot of PHP code here

<?php print_r ($categories) ?>

Nur wenn wir den globalen Status direkt vor der Verwendung der Variablen initialisieren, ist es ziemlich schwer zu sagen, ob er global ist oder nicht. Und vergessen Sie nicht, es in einer Ihrer Vorlagendateien zu wiederholen.

Es ist möglich, dafür Namenskonventionen zu verwenden, aber meiner Meinung nach gibt es einen besseren Weg.

Erwägen Sie die Verwendung von $GLOBALS['categories'].

Wir müssen unsere Variable nur einmal in functions.php initialisieren, ohne erneut über global $categories nachdenken zu müssen. Und wir können sehen, dass es ein globales ist.

print_r ($GLOBALS['categories']);

In dieser Situation ist das Leistungsproblem überhaupt kein Problem. Ich zitiere Sara Golemon ( link ):

Was bedeutet das für Ihre Verwendung des $ GLOBALS-Arrays? Richtig, das globale Keyword ist technisch gesehen schneller. Jetzt möchte ich eines klarstellen. Die geringe Geschwindigkeitsersparnis, die sich aus der Verwendung Ihrer Globals als lokalisierte [kompilierte Variablen] ergibt, muss ernsthaft gegen die Wartbarkeit abgewogen werden, wenn Sie Ihren Code in fünf Jahren überprüfen und wissen, dass $ foo aus dem globalen Bereich stammt. something_using ($ GLOBALS ['foo']); wird Ihnen IMMER klarer sein als globales $ foo;/* buncha code */something_using ($ foo); Seien Sie nicht Penny-weise und Pfund dumm ..

0
Keeprock