@toscho skomentował tę odpowiedź, co skłoniło mnie do ponownego przemyślenia. Ile zaufania powinniśmy mieć w skali globalnej, szczególnie w odniesieniu do post globali, takich jak $post
?
Więc co? Zmienna globalna może zostać nadpisana przez wszystkich przed uruchomieniem testu. To jest punkt zmiennych globalnych: globalny dostęp.
$post
na przykład jest z pewnością jednym z globałów, które są w większości modyfikowane w samym motywie lub za pomocą wtyczek. Jest to jednak globalny najczęściej używany w innych aplikacjach w ramach danego szablonu, na przykład do konfigurowania powiązanych postów.
Z odpowiadania (i komentowania) na kilka postów z konkretnymi problemami spowodowanymi użyciem niestandardowych zapytań , naprawdę wyróżnia się to, że większość problemów jest spowodowana brakiem resetowania niestandardowych zapytań (niestandardowe zapytania zmieniają globalne ustawienia określone przez główne zapytanie).
Z tego wynika, że $post
nie jest to wiarygodne. Każdy źle napisany fragment kodu korzystający z niestandardowego zapytania może zmienić $post
globalny, co z kolei coś zepsuje (np. Powiązane posty).
Tylko garstka programistów WordPress ma wystarczającą wiedzę na temat wewnętrznego działania rdzenia i wie, czego unikać, a czego nie. Większa populacja użytkowników nie ma pojęcia, jak działa rdzeń WordPress.
Po prostu pobierają motyw i instalują wtyczki, aby zrobić to, co jest potrzebne, a nawet po prostu kopiują kod z samouczka. Powiedzmy, że instalują źle napisaną wtyczkę, która psuje powiązane posty w jednym poście, skąd będą wiedzieć, co to spowodowało? Czy będą w stanie to rozwiązać samodzielnie, czy będzie setną osobą piszącą do autora tematu e-maila na temat tego problemu lub zamieszczającą pytanie na tej stronie?
Moje pytanie: w jaki sposób możesz zabezpieczyć się przed takimi problemami spowodowanymi przez inny importowany kod, gdy taki globalny $post
jest tak zawodny? Czy powinniśmy $post
w ogóle używać globalnego ? Jakie są alternatywy?
Po prostu podzielę się tutaj swoimi myślami, zanim zakończę: pomyślałem (i widziałem również w niektórych motywach i wtyczkach) albo używam wp_reset_postdata()
albo wp_reset_query()
przed użyciem $post
, aby upewnić się, że globalny jest resetowany do głównego zapytania $post
. Ale dlaczego mam zawyżać kod w moim motywie, ponieważ ktoś inny nie kodował poprawnie jego wtyczki? A jeśli ktoś poprawnie zresetował niestandardowe zapytanie, operacja ta jest uruchamiana niepotrzebnie po raz drugi, co nie jest dobre.
Druga metoda, o której myślałem, to wykorzystanie, $wp_query
a następnie użycie jej metod, coś w rodzaju $wp_query->post
.
Wszelkie uwagi na ten temat będą mile widziane.