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?
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
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