Muszę utworzyć zmienną, do której można uzyskać dostęp w plikach szablonów WordPress Theme (index.php, header.php itp.). Wiem, że definicje funkcji wchodzą do functions.php
pliku szablonu (na ścieżce motywu), ale nie ma czegoś takiego w przypadku zmiennych.
Na przykład stale muszę pobierać kategorie w moim motywie, dlatego chciałbym, aby był dostępny z dowolnego miejsca w moim motywie:
$categories = get_categories(); /* get_categories() is a wordpress function */
W ten sposób mogę po prostu uzyskać dostęp do przydzielonych danych, bez konieczności ponownego przydzielania ich za każdym razem, gdy potrzebuję uzyskać moje kategorie.
Niestety dodanie tego fragmentu kodu do mojego functions.php
pliku nie działa, podobnie jak tworzenie zmiennej global
.
require()
wypowiedzi, które są zapakowane w funkcji:get_header()
,get_footer()
itp; które same są opakowaniami wokół funkcjiget_template_part()
. Ponieważ funkcje w PHP mają dostęp tylko do zdefiniowanych w nich zmiennych lub przekazanych przez odniesienie do nich, jeśli chcesz użyć zmiennej z zakresu globalnego (lub zdefiniować zmienną i udostępnić ją w zakresie globalnym), musisz ją ogłosić najpierw z globalnym słowem kluczowym.Dominic (nie wiem, jak dodać notatkę do swojej odpowiedzi):
Zdefiniuj akceptuje tylko skalary, więc nie możesz tego zrobić,
define( CATS, get_categories() );
a nawet nieW przeciwnym razie zdefiniowanie działa dobrze i jest w rzeczywistości bezpieczniejsze dla skalarów (ponieważ możesz być pewien, że stałych nie da się zastąpić)
źródło
Wiem, że ten jest naprawdę stary, ale istnieje pole do poprawy.
Powinieneś rozważyć użycie $ GLOBALS ['kategorie'] zamiast tylko globalnego.
Istnieją dwa powody:
global $categories;
za każdym razem.Rozważ ten kod:
Tylko jeśli zainicjujemy stan globalny tuż przed użyciem zmiennej, trudno jest stwierdzić, czy jest ona globalna, czy nie. I nie zapomnij powtórzyć go w jednym z plików szablonów, które masz.
Można do tego wykorzystać konwencje nazewnictwa, ale moim zdaniem istnieje lepszy sposób.
Rozważ użycie
$GLOBALS['categories']
.Musimy zainicjować naszą zmienną tylko raz w functions.php, bez konieczności
global $categories
ponownego myślenia . I widzimy, że jest globalny.print_r ($GLOBALS['categories']);
W tej sytuacji problem z wydajnością wcale nie stanowi problemu. Zacytuję Sara Golemon ( link ):
źródło
Działa to również:
w functions.php add
define('TEST', 'this is a test');
oraz w pliku header.php lub cokolwiek innego
echo TEST;
Czy istnieje jakaś przewaga wydajności jednej metody nad drugą?
źródło