以前から取り組んでいる Google アドセンスの対応のために WordPress のメニューを開きました。
そうすると、テーマの更新をうながす数字入りの赤い丸が表示されていたので、テーマのページを開き、更新のリンクをクリックして数分待ちました。
※休日でレンタルサーバにアクセスする人が多いせいか、サイトの更新に失敗することも数回あったので、それとのからみでテーマの更新に失敗したのかもしれません。
その後、「更新に失敗」という趣旨のメッセージが表示されました。
※あせってしまいスクリーンショットは取り忘れました。
不安になり、Wordpress で作っている筆者のサイトのトップページを開くと、次のようなエラーメッセージが表示されています。
「サイトが壊れた」と思い、焦りましたが、エラーメッセージを調べて、対処法についてわかったのでその手順を紹介します。
※Wordpress 6.1.1、PHP 7.4.33、chrome 110.0.5481.105 です。
エラーメッセージ
とにかく重要な手掛かりは、 WordPress のトップページへアクセスした際に表示されたこのエラーメッセージです。
テーマ更新に失敗したページで、左側の WordPress のメニューで何かしらのリンクを押しても同様にエラーメッセージが表示されるだけになったので、WordPress メニューからの修復も無理だと思いました。
エラーメッセージは丁寧に太字になっており、そのファイルが問題でした。
Fatal error: Uncaught Error: Call to undefined function trailingslashit() in /home/compota-soft/www/wp1/wp-includes/class-wp-textdomain-registry.php:103 Stack trace: #0 /home/compota-soft/www/wp1/wp-includes/l10n.php(784): WP_Textdomain_Registry->set('default', 'ja', '/home/compota-s...') #1 /home/compota-soft/www/wp1/wp-includes/load.php(1401): load_textdomain('default', '/home/compota-s...', 'ja') #2 /home/compota-soft/www/wp1/wp-includes/load.php(278): wp_load_translations_early() #3 /home/compota-soft/www/wp1/wp-settings.php(74): wp_maintenance() #4 /home/compota-soft/www/wp1/wp-config.php(93): require_once('/home/compota-s...') #5 /home/compota-soft/www/wp1/wp-load.php(50): require_once('/home/compota-s...') #6 /home/compota-soft/www/wp1/wp-admin/admin.php(34): require_once('/home/compota-s...') #7 /home/compota-soft/www/wp1/wp-admin/themes.php(10): require_once('/home/compota-s...') #8 {main} thrown in /home/compota-soft/www/wp1/wp-includes/class-wp-textdomain-registry.php on line 103
「テーマ 更新 失敗」やエラーメッセージ「Uncaught Error: Call to undefined function trailingslashit」などで検索すると、「WordPress のエラー: Uncaught Error: Call to undefined function trailingslashit() – Unofficial Web Site Tokyo」に書いてありました。
WordPress 6.1のバグ (https://core.trac.wordpress.org/ticket/57218)。プラグイン更新時にメンテナンスモードに入るとこのエラーになるらしい。
https://unofficialtokyo.com/2023/01/uncaught-error-call-to-undefined-function-trailingslashit/
対処法についても紹介されていました。
先ほどのエラーメッセージの太字になっている class-wp-textdomain-registry.php の 103 行目を修正することが現状の対処法のようです。
先ほど紹介したサイト様にも書いてあり、その情報源の「“Call to undefined function trailingslashit()” wordpress PHP fatal error when trying to update plugins – Stack Overflow」にも次のように 103 行目のコードを修正すると書いてあります。
$this->all[ $domain ][ $locale ] = $path ? trailingslashit( $path ) : false;
To:
https://stackoverflow.com/questions/74653740/call-to-undefined-function-trailingslashit-wordpress-php-fatal-error-when-tr$this->all[ $domain ][ $locale ] = $path ? rtrim( $path, '/\\' ). '/' : false;
FFFTP による php コードの修正
ここからは、調べた情報をもとに、実際にレンタルサーバの WordPress 内の php をダウンロードし、修正し、アップロードする手順を紹介します。
ファイルのダウンロード・アップロードに用いるソフト FFFTP は「「FFFTP」定番FTPクライアントソフト – 窓の杜」などからダウンロードし、インストールしましょう。
※最初にサーバへの設定を行う必要があります。FFFTP の使用例については「WordPress 子テーマで外観を変更(1) 子テーマ解説とファイル追加方法 | Compota-Soft-Press」で紹介しています。
WordPress がインストールされているサーバのフォルダに FFFTP でアクセスし、問題の php ファイルをダウンロードします。
WordPress のインストール先フォルダの wp-includes フォルダ内に class-wp-textdomain-registry.php ファイルがあるので、それを選択し、ダウンロードボタンでローカルに保存します。
編集する前に、バックアップのためのコピーを取っておくと良いでしょう。
ダウンロードした php ファイルをテキストエディタで開き、先ほど説明があったように 103 行目を変更します。
// 変更前 before
$this->all[ $domain ][ $locale ] = $path ? trailingslashit( $path ) : false;
// 変更後 after
$this->all[ $domain ][ $locale ] = $path ? rtrim( $path, '/\' ). '/' : false;
103 行目の変更を保存したら、FFFTP のアップロードボタンを押して、サーバのその php ファイルを上書きします。
※上書きの前に変更前の php をバックアップすることをお勧めします。
修正の確認
修正が済んだら、先ほどエラーメッセージが表示されていた、トップページや管理画面を更新して表示してみましょう。
修正の結果、エラーメッセージではなく通常のサイトが表示されました。
まとめ
今回は、Wordpress 6.1 のテーマ更新に失敗した直後、サイトやその管理画面が表示されずエラーメッセージだけが出る問題について調べ、具体的な修正の手順を紹介しました。
問題が起きたときは、慌ててしまうかもしれませんが、もしも英語であってもテキストメッセージなどがあれば、その一部(冒頭の一文など)で検索をしたり、翻訳をすると修正の手掛かりになるかもしれません。
今回は、運よく対処法を紹介しているサイト様が見つかり修正がすぐにできました。情報を掲載されているサイト様に感謝します。また、サーバに GUI でアクセスできる FFFTP にも感謝します。
コメント