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,
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.