« Il y a eu une erreur critique sur ce site. » : Quoi faire pour débloquer WordPress ?

Il y quelques semaines ce site qui tourne sur WordPress a commencé à me prévenir par e-mail que quelque-chose clochait : « Votre site connaît un problème technique ». Et effectivement je n’avais plus accès à l’interface d’administration. 😨

Je viens de prendre le temps de débloquer la situation (ce qui me permet d’écrire cette article) et voici comment j’ai procédé !

Première étape : avoir des logs

J’ai commencé par accéder aux fichiers du WordPress et pour en savoir un peu plus j’ai ajouté les lignes suivantes au fichier wp-config.php :

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', true );

Cela a pour effet de journaliser toutes les actions et les erreurs de WordPress dans le fichier wp-content/debug.log. Et voici ce que j’ai pu y lire :

[27-Jul-2023 11:25:17 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function is_user_logged_in() in /var/www/florent.poinsaut.fr/wp-content/plugins/change-wp-admin-login/includes/class-change-wp-admin-login.php:387
Stack trace:
#0 /var/www/florent.poinsaut.fr/wp-content/plugins/change-wp-admin-login/includes/class-change-wp-admin-login.php(374): Change_WP_Admin_Login->filter_wp_login_php('https://florent...', 'admin')
#1 /var/www/florent.poinsaut.fr/wp-includes/class-wp-hook.php(308): Change_WP_Admin_Login->site_url('https://florent...', 'wp-admin/', 'admin', NULL)
#2 /var/www/florent.poinsaut.fr/wp-includes/plugin.php(205): WP_Hook->apply_filters('https://florent...', Array)
#3 /var/www/florent.poinsaut.fr/wp-includes/link-template.php(3509): apply_filters('site_url', 'https://florent...', 'wp-admin/', 'admin', NULL)
#4 /var/www/florent.poinsaut.fr/wp-includes/link-template.php(3539): get_site_url(NULL, 'wp-admin/', 'admin')
#5 /var/www/florent.poinsaut.fr/wp-content/plugins/edit-flow/edit_flow.php(5 in /var/www/florent.poinsaut.fr/wp-content/plugins/change-wp-admin-login/includes/class-change-wp-admin-login.php on line 387

Pour faire bref, on peut y lire que le plugin change-wp-admin-login utilise une fonction nommée is_user_logged_in qui est introuvable.

Après vérification il s’agit bien une fonction du moteur WordPress : https://developer.wordpress.org/reference/functions/is_user_logged_in/. 🤔

Deuxième étape : trouver une solution

Je me dis que le plus simple est de désactiver le plugin. Et je me souviens qu’il existe un utilitaire en ligne de commande WP CLI. Je teste mais…

$ wp plugin list
Fatal error: Uncaught Error: Call to undefined function is_user_logged_in() in /var/www/florent.poinsaut.fr/wp-content/plugins/change-wp-admin-login/includes/class-change-wp-admin-login.php:387
Stack trace:
#0 /var/www/florent.poinsaut.fr/wp-content/plugins/change-wp-admin-login/includes/class-change-wp-admin-login.php(374): Change_WP_Admin_Login->filter_wp_login_php('https://florent...', 'admin')
#1 /var/www/florent.poinsaut.fr/wp-includes/class-wp-hook.php(308): Change_WP_Admin_Login->site_url('https://florent...', 'wp-admin/', 'admin', NULL)
#2 /var/www/florent.poinsaut.fr/wp-includes/plugin.php(205): WP_Hook->apply_filters('https://florent...', Array)
#3 /var/www/florent.poinsaut.fr/wp-includes/link-template.php(3509): apply_filters('site_url', 'https://florent...', 'wp-admin/', 'admin', NULL)
#4 /var/www/florent.poinsaut.fr/wp-includes/link-template.php(3539): get_site_url(NULL, 'wp-admin/', 'admin')
#5 /var/www/florent.poinsaut.fr/wp-content/plugins/edit-flow/edit_flow.php(5 in /var/www/florent.poinsaut.fr/wp-content/plugins/change-wp-admin-login/includes/class-change-wp-admin-login.php on line 387
Error: Il y a eu une erreur critique sur ce site.En apprendre plus sur le débogage de WordPress. Il y a eu une erreur critique sur ce site.

En parcourant la doc, je vois qu’il existe l’option --skip-plugins qui pourrait me permettre de m’en sortir !

$ wp --skip-plugins=change-wp-admin-login plugin list
+-----------------------+----------+-----------+----------+
| name                  | status   | update    | version  |
+-----------------------+----------+-----------+----------+
...
| change-wp-admin-login | active   | available | 1.1.4    |
...
+-----------------------+----------+-----------+----------+

Ah mais il y a une mise à jour de dispo ! 👀

$ wp --skip-plugins=change-wp-admin-login plugin update change-wp-admin-login
Activation du mode maintenance...
Téléchargement de la mise à jour depuis https://downloads.wordpress.org/plugin/change-wp-admin-login.1.1.6.zip…
L’authenticité de change-wp-admin-login.1.1.6.zip n’a pas pu être vérifiée car aucune signature n’a été trouvée.
Décompression de la mise à jour...
Installation de la dernière version...
Retrait de l’ancienne version de l’extension...
L’extension a bien été mise à jour.
Désactivation du mode maintenance...
Success: All QUIC.cloud service queues have been cleared.
Success: Tous les caches ont bien été purgés.
Success: Updated 1 of 1 plugins.
+-----------------------+-------------+-------------+---------+
| name                  | old_version | new_version | status  |
+-----------------------+-------------+-------------+---------+
| change-wp-admin-login | 1.1.4       | 1.1.6       | Updated |
+-----------------------+-------------+-------------+---------+

Oh yeah ! 💪

Dernière étape : tester !

Je relance la commande wp mais cette fois sans option pour voir si ça fonctionne :

$ wp plugin list
+-----------------------+----------+-----------+----------+
| name                  | status   | update    | version  |
+-----------------------+----------+-----------+----------+
...
| change-wp-admin-login | active   | none      | 1.1.6    |
...
+-----------------------+----------+-----------+----------+

Je ne me fais plus gronder ! C’est bon signe !

Je teste via le web : OUI ! C’est bon j’ai retrouvé mon interface d’admin. Ouf ! 🎉

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.