Momentan verwende ich den folgenden allgemeinen Ablauf zum Hinzufügen des Shortcodes für ein Plugin.
class MyPlugin {
private $myvar;
function baztag_func() {
print $this->myvar;
}
}
add_shortcode( 'baztag', array('MyPlugin', 'baztag_func') );
Wenn diese Klasse und ihre Methode aufgerufen werden, erhalte ich den folgenden Fehler.
Schwerwiegender Fehler: Verwenden von $ this, wenn es sich nicht im Objektkontext befindet in ...
(Zeile Nr. Ist, wo ich das gedruckt habe $this->myvar
)
Ist das ein Problem bei Wordpress oder gibt es etwas, was ich falsch mache? Es scheint etwas wirklich Einfaches zu sein.
plugin-development
shortcode
oop
xmaestro
quelle
quelle
static
.Antworten:
Wie der Fehler besagt, müssen Sie eine Instanz der Klasse verwenden
$this
. Es gibt mindestens drei Möglichkeiten:Mach alles statisch
Aber das ist kein echtes OOP mehr, nur noch Namensraum.
Erstellen Sie zuerst ein reales Objekt
Das funktioniert. Sie haben jedoch einige undurchsichtige Probleme, wenn jemand den Shortcode ersetzen möchte.
So fügen Sie eine Methode hinzu, um die Klasseninstanz bereitzustellen:
Wenn jemand die Objektinstanz erhalten möchte, muss er nur schreiben:
Alte Lösung: Erstellen Sie das Objekt in Ihrer Klasse
quelle
NULL === self::$instance and self::$instance = new self;
? Ich bin da ein bisschen verwirrt===
und werdeand
benutzt, aber ohneif
, wenn du weißt was ich meine.Sie können so einen Shortcode innerhalb der Klasse verwenden
Wenn Sie auf Shortcode-Inhalte einer anderen Klasse zugreifen möchten. Das kannst du machen.
quelle
Stellen Sie sicher, dass Sie eine Instanz Ihrer Klasse erstellen, bevor Sie sie verwenden, es sei denn, Sie sind sicher, dass sie statisch aufgerufen werden soll. Wenn Sie eine Methode statisch aufrufen, verwenden Sie keine Instanzen und haben daher keinen Zugriff auf Membervariablen oder -methoden.
quelle