web-dev-qa-db-fra.com

functions.php est inclus deux fois, créant PHP erreurs fatales

J'ai un script personnalisé PHP (qui importe Wordpress via wp-load.php) que j'ai utilisé avec succès sur de nombreux sites par le passé, mais qui se comporte mal sur un site particulier apparemment après deux ou trois projets Wordpress. mises à jour (version actuelle 4.7.1).

La situation est la suivante:

  • Le script PHP, nécessitant wp-load.php, est appelé via javascript pour traiter les données de formulaire.
  • Le traitement du formulaire a bien fonctionné jusqu'à il y a quelques semaines. Maintenant, il lance une erreur de 500 serveur interne.
  • Les journaux PHP affichent des erreurs comme celle-ci:

    Erreur irrécupérable PHP: impossible de redéclarer my_wp_nav_menu_args () (précédemment déclaré dans /path/to/site/wp-content/themes/uc/functions.php:15) dans/chemin/vers/site/wp-content/themes/uc/functions.php à la ligne 18

  • L'erreur semble indiquer que functions.php est appelée deux fois. Pour tester cela, j'ai commenté toutes les fonctions de functions.php et, voilà, mon script PHP fonctionnait parfaitement.

  • Malgré cela, le reste du site fonctionne très bien ... bien qu'il charge un sacré sacrément lentement, et je l'exécute sur ma machine locale. Hmmm.

  • Pour votre information, il n’ya vraiment rien de spécial ou d’extraordinaire dans le reste du site. J'utilise ACF pour beaucoup de choses mais je n'ai jamais eu de problèmes avec ça.

Serait-il vrai que functions.php soit appelé deux fois? Si c'est le cas, comment? Quelqu'un d'autre a-t-il eu un problème similaire avec l'une des récentes mises à jour principales WP? Mary Beth et Victor trouveront-ils jamais le véritable amour?

Découvrez tout cela et plus sur le prochain épisode de "Burning Money the Wordpress Way"!

Toute aide serait SOOO appréciée.

1
Mark Kanning

Ah, bon Dieu: la routine du premier check-all-your-your-plugins-first m'aurait fait gagner du temps.

Apparemment, un plugin tiers ACF, https://wordpress.org/plugins/acf-google-font-selector-field/ , était à l'origine du problème. La lenteur du chargement de page dont j'ai parlé a également été corrigée.

C'est dommage. J'ai besoin de ce plugin stupide.

2
Mark Kanning

1) Je pense que le problème devrait être résolu, si dans votre script php personnalisé, vous ferez exit; après l'exécution de vos actions souhaitées.

2) En outre, vous pouvez utiliser quelque chose comme ceci au début de votre fichier functions.php:

if (in_array(__FILE__, get_included_files())) return;
0
T.Todua