Actuellement, j'utilise le flux générique suivant pour ajouter le shortcode pour un plugin.
class MyPlugin {
private $myvar;
function baztag_func() {
print $this->myvar;
}
}
add_shortcode( 'baztag', array('MyPlugin', 'baztag_func') );
Maintenant, lorsque cette classe et sa méthode sont appelées, j'obtiens l'erreur suivante.
Erreur fatale: utilisation de $ this en dehors du contexte de l'objet dans ...
(La ligne n'est pas l'endroit où j'ai imprimé le $this->myvar
)
Est-ce un problème du côté de Wordpress ou y a-t-il quelque chose que je fais mal? Cela semble être quelque chose de vraiment simple.
plugin-development
shortcode
oop
xmaestro
la source
la source
static
.Réponses:
Comme le dit l'erreur, vous avez besoin d'une instance de la classe à utiliser
$this
. Il y a au moins trois possibilités:Rendez tout statique
Mais ce n'est plus du vrai POO, juste de l'espace de noms.
Créez d'abord un objet réel
Cela marche. Mais vous rencontrez des problèmes obscurs si quelqu'un veut remplacer le shortcode.
Ajoutez donc une méthode pour fournir l'instance de classe:
Maintenant, quand quelqu'un veut obtenir l'instance d'objet, il lui suffit d'écrire:
Ancienne solution: créer l'objet dans votre classe
la source
NULL === self::$instance and self::$instance = new self;
? Je suis un peu confus car===
etand
habitué, mais sansif
, si vous voyez ce que je veux dire.Vous pouvez utiliser comme ceci, shortcode à l'intérieur de la classe
Si vous souhaitez accéder au contenu de shortcode d'une autre classe. Vous pouvez faire comme ça.
la source
Assurez-vous de créer une instance de votre classe avant de l'utiliser, sauf si vous êtes sûr qu'elle est censée être appelée statiquement. Lorsque vous appelez une méthode de manière statique, vous n'utilisez aucune instance et, par conséquent, elle n'a accès à aucune variable ou méthode membre.
la source