2010-06-24 4 views
1

J'ai un plugin qui est déclaré et accroché en suivant les meilleures pratiques décrites dans cette question connexe:fonctions, plug-in, et portée de thème mu wordpress

Wordpress: Accessing A Plugin's Function From A Theme

Il semble donc (platonique) comme ceci:

if (!class_exists('Foo')) { 
    class Foo { 
    ... 
    public function do_stuff() { 
     // does stuff 
    } 
    } 
} 

if (class_exists('Foo')) { 
    $MyFoo = new Foo(); 
} 

maintenant, si je l'appelle $ MyFoo-> do_stuff() à partir d'un fichier de thème, comme, par exemple, single.php, MyFoo $ en fait does_stuff et je vois la sortie dans la page .

Cependant, si j'écris une fonction dans functions.php qui veut appeler $ MyFoo-> do_stuff() et ensuite appeler cette fonction de single.php, l'objet est introuvable. En résumé,

Travaux:

in themes/my_theme/single.php: 
    if (isset($MyFoo)) 
    $MyFoo->do_stuff(); 

ne fonctionne pas:

in themes/my_theme/functions.php: 
    function do_some_foo_stuff() { 
    ... 
    if (isset($MyFoo)) { 
     $MyFoo->do_stuff(); 
    } else { 
     echo "no MyFoo set"; 
    } 
    ... 
    } 
themes/my_theme/single.php: 
    if (isset($MyFoo)) 
    do_some_foo_stuff(); 

Sorties -> "aucun jeu de MyFoo"

Cela peut être tout à fait surprenant, mais il est quelque chose que je dois Je veux travailler, donc si quelqu'un peut expliquer ce qui se passe, ce serait apprécié. Pourquoi le fichier de fonctions du thème (ou d'autres fichiers plugin dans les plugins mu d'ailleurs) ne peut-il pas trouver l'objet $ MyFoo?

Répondre

2

Lire sur variable scope. La variable $MyFoo n'est pas accessible dans la fonction do_some_foo_stuff() à moins que vous ne la déclariez globale en premier;

function do_some_foo_stuff() 
{ 
    global $MyFoo; 
    ... 
} 
+0

Merci, c'est une solution de travail, mais je suppose que je ne comprends toujours pas l'architecture WP assez bien pour comprendre pourquoi la variable plugin est directement accessible (sans déclaration globale) dans les fichiers de description de thème, tels que single.php et home.php, mais est hors de portée dans le fichier functions.php. Avez-vous des recommandations spécifiques Wordpress pour du matériel de référence sur la portée variable? – Bee

+0

Il s'agit moins de faire avec WordPress, et plus sur la portée variable de PHP. Les fichiers de thème sont simplement des fichiers PHP inclus dans le script et auront accès aux variables de la portée parent. Personnellement, j'essaie d'éviter tous les globals - je pense qu'un cours singleton conviendrait beaucoup mieux à votre objectif ici - http://www.tonymarston.net/php-mysql/singleton.html – TheDeadMedic

Questions connexes