web-dev-qa-db-fra.com

Erreur fatale: appel de la fonction non définie add_action () - un problème non résolu

La question a été posée à plusieurs reprises de nombreuses manières, mais malheureusement, la plupart des réponses ne la traitent pas bien. Je rencontre le même problème en utilisant des fichiers d'inclusion.

Dans le functions.php de mon thème TwentyFourteen child, j'ai utilisé:

require_once get_stylesheet_directory_uri() .'/admin-panel/theme-options.php';

Et j'utilise Exemples de thèmes de Ian Stewart . Je l'ai utilisé dans bon nombre de mes projets, de la même manière que celle mentionnée ici, sans avoir d'erreur. Mais récemment, je rencontre le problème dans plusieurs de mes projets. Si je prends le code pour functions.php alors tout va bien. Mais cela ne se produit que lorsque j'essaie d'inclure/d'exiger un fichier externe.

J'ai l'erreur

Erreur fatale: Appel de la fonction non définie add_action() dans C:\xampp\htdocs\project\wp-content\themes\mon-theme\admin-panel\thème-options.php on line 2

Dans ce cas, l'erreur est liée à l'utilisation d'un thème enfant (de T14). Mais même dans un de mes thèmes parent, je suis confronté au problème. Mais dans le même environnement, mes autres projets fonctionnent bien avec tous les inclus et/ou tous les requis (où plusieurs add_action()s sont définis). J'ai des problèmes avec TOUS les appels add_action(), comme attribution CPT, attribution de taxonomie personnalisée etc. Mais je développe avec succès deux autres projets, y compris des fichiers externes à partir du dossier inc/ où tous mes CPT sont affectés et leurs boîtes à méta aussi.

J'ai essayé de réinstaller WordPress, de désactiver tous mes plugins, de Child Theme, de modifier TwentyFifteen (application du thème par défaut), d'essayer require(), require_once(), include(), include, require_once et require l'un après l'autre. Et j'utilise WP 4.1.1 dans toutes les bonnes et problématiques installations.

La majorité des questions précédentes sont répondues avec une simple ligne:

_ {Comme le message l'indique, vous n'avez pas défini la fonction add_action() et pourtant vous essayez de l'utiliser.}

Mais,

  • comment se fait-il (n'est-ce pas déjà défini par WordPress)? et
  • pourquoi le projet est différent de se projeter dans le même environnement (Comment se fait-il que ce ne soit plus dans le champ d'application maintenant que dans des projets particuliers)?
1
Mayeenul Islam

get_stylesheet_directory_uri() renvoie une URL. Le fichier demandé est appelé comme toute autre ressource accessible au public: sans le contexte de l'instruction include. Cela revient à ouvrir le fichier PHP dans un navigateur directement. Il n'y a pas de contexte WordPress et les fonctions add_action() ou add_filter() ne sont pas définies.

Utilisez get_template_directory() dans les thèmes parents et get_stylesheet_directory() dans les thèmes enfants.

Désactivez allow_url_fopen ET allow_url_include dans votre environnement de développement afin d’attraper les erreurs comme celle-ci plus tôt et avec de meilleurs messages d’erreur.

3
fuxia