Obecnie używam następującego ogólnego przepływu do dodawania krótkiego kodu dla wtyczki.
class MyPlugin {
private $myvar;
function baztag_func() {
print $this->myvar;
}
}
add_shortcode( 'baztag', array('MyPlugin', 'baztag_func') );
Teraz, gdy ta klasa i jej metoda są nazywane, pojawia się następujący błąd.
Błąd krytyczny: użycie $ this, gdy nie jest w kontekście obiektowym w ...
(Numer linii to miejsce, w którym wydrukowałem $this->myvar
)
Czy to problem po stronie Wordpress, czy coś robię źle? To wydaje się być bardzo proste.
plugin-development
shortcode
oop
Xmaestro
źródło
źródło
static
.Odpowiedzi:
Jak mówi błąd, potrzebujesz instancji klasy do użycia
$this
. Istnieją co najmniej trzy możliwości:Uczyń wszystko statycznym
Ale to już nie jest prawdziwy OOP, tylko przestrzeń nazw.
Najpierw stwórz prawdziwy obiekt
To działa. Ale jeśli ktoś chce zastąpić krótki kod , napotkasz jakieś niejasne problemy .
Dodaj więc metodę, aby zapewnić instancję klasy:
Teraz, gdy ktoś chce uzyskać instancję obiektu, musi po prostu napisać:
Stare rozwiązanie: utwórz obiekt w swojej klasie
źródło
NULL === self::$instance and self::$instance = new self;
? Jestem trochę zdezorientowany, ponieważ===
iand
są używane, ale bezif
, jeśli wiesz, co mam na myśli.Możesz użyć w ten sposób krótkiego kodu wewnątrz klasy
Jeśli chcesz uzyskać dostęp do zawartości shortcode z innej klasy. Możesz to zrobić w ten sposób.
źródło
Upewnij się, że wykonałeś instancję swojej klasy przed jej użyciem, chyba że masz pewność, że ma ona zostać wywołana statycznie. Kiedy wywołujesz metodę statycznie, nie używasz żadnych instancji, a zatem nie ma ona dostępu do żadnych zmiennych składowych ani metod.
źródło