こちらと別で作ってるサイトで、以前からテーマのfunctions.phpを更新するとエラーが出ていたのですが、サイトが正常に表示されていたので(訪問ユーザーからは影響がない)、放置してたのですがサイトのSSL化で直すことにしました。
PHPファイルの修正などの方法があるかと思いますが、今回は手っ取り早く(バックアップを取ってから)「WordPress新規インストール>DBインポート>テーマやプラグイン、画像ファイルのアップロード」を行いました。
functions.phpが更新できない現象について
有効にしてるテーマのfunctions.phpを更新しようとするとエラーで出来ない。
BackWPupプラグインのバックアップファイルをテスト環境に復元しても【致命的エラー…」になる。※SQLファイル内のURLとサーバーのディレクトリパスはテスト環境に修正済み
使ってるテーマは「Cocoon」。パラメーター付きURLのSNSアイコンを設置するなどで、functions.phpにショートコードを書いています。
致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。SFTP を使うなど、他の手段で PHP ファイルの変更をアップロードする必要があります。
「致命的なエラー…」が出る時は、PHPの記入ミスなどでエラーになることが多いのですが、今回のエラーは初期テーマ「Twenty系」を有効にしてfunctions.phpも編集しない状態で保存してもエラーになり保存できません。
テーマをいじってなくてデフォルトの状態でも「致命的なエラー…」が出ます。また、有効にしてないテーマで「functions.php」の更新は出来るのですが、そのテーマを有効にして【ファイルの更新】をすると致命的なエラーが表示され保存できません。
はっきりとした原因は分からないですが、どうもWordPress本体に問題があるのではと考えられます。
WordPress新規インストールとデータベースインポートでエラーが出なくなった
元々、サイトのSSL化はテスト環境で行ってから元サイト(本番環境)に移行を考えていたので、「致命的なエラー」についてもテスト環境で確認と対処をしようと思います。
元サイトの「example.com」から「test.example.com」のようなサブドメインを作って作業します。使用してるサーバーは同じです。
作業前の準備
レンタルサーバーのコントロールパネルから、テスト用のサブドメインとデータベースは作成済みです。
元サイトでBackWPupプラグインでバックアップしたデータをダウンロードして解凍。
テーマにCocoonを使用してる場合は、Cocoonのバックアップもローカルにダウンロードします。最後に復元して設定を反映させます。
データベース(SQL)のURLとドメインのサーバーディレクトリパスをテスト用のサブドメインに置き換えます。
バックアップデータの復元やサーバー引っ越し、サイトURLの引っ越しの場合は、FTPでファイルアップロードや修正したSQLファイルをphpMyAdminでインポートするだけですが、今回は「致命的なエラー」を解決するため手順が変わります。
WordPress新規インストールとデータベースのインポート
簡単な流れ
- WordPress新規インストール
- phpMyAdminでデータベースインポート
- バックアップデータからテーマやプラグインをFTPでアップロード
- 画像データもFTPでアップロード
サーバーのコントロールパネルから「WordPress 簡単インストール」などあれば、それでWordPressを新規にインストールします。
WordPressのログインIDやパスワード、データベースの接頭辞は元のサイトと同じにします。※データベースはテスト用に作ったデータベースを使用。
WordPressがインストール出来たら、サイトが表示されるかの確認。
まだサンプルページなので問題なく表示される。この状態で、テーマエディタからfunctions.phpの編集画面に行き【ファイルを更新】しても正常に完了する。
続いて、phpMyAdminにログインして、テスト用データベースに修正したSQLをインポート。
ローカルに解凍したバックアップデータからテーマやプラグインをFTPソフトでアップロードします。
テーマ:「\wp-content\themes\」
プラグイン:「\wp-content\plugins」
アップロードしたら、使っていたテーマを有効にして「functions.php」を更新できるか確認。
これも正常に完了した。
最後に、記事で使用してる画像をFTPでアップロードします。
画像の場所:「\wp-content\uploads\2020」
WordPressの設定でアップロード画像を「年月」のフォルダに分けている場合は「2020」や「2019」のように年のフォルダをFTPでアップロードします。
画像最適化プラグインのEWWWや他のプラグインで生成されたファイルが「uploads」内にある場合は、「uploads」毎FTPでアップロードしたほうが良いかも。
その他、任意でFTPなどでアップロードしてるフォルダやファイルがあり場合はそれもテスト環境にアップロードする。
画像のアップロードも完了したら、「functions.php」を更新できるか再度確認。
これも正常に完了。
サイトのページが正常に表示されていたら作業完了です。
テーマCocoonの場合、Cocoonの「バックアップ」から復元でCocoonの設定を反映させます。
今回はテスト環境での確認だけなのでここまで。
このテスト環境をBackWPupプラグインでバックアップを取り、SQLファイルのURLやサーバーのディレクトリパスを修正したうえで元のサイトに復元すると、正常に「functions.php」を更新できると思います。
ただ、元サイトへの復元作業中にアクセスがあると正常に表示されないので、作業する時間帯は考えないといけないですが。
契約してるサーバーのデータベースや登録ドメイン数、容量に余裕があれば、
サーバーのディレクトリやデータベースも「example2.com」など作っておき、FTPでファイルのアップロードとデータベースインポートしてから(wp-config.phpのデータベース接続が変わります)、サーバーコントロールパネルの登録ドメインの設定からディレクトリを「example2.com」切り替える方法もあります。
余談。試したけど「致命的なエラー」のままだった方法
試したけど、「致命的なエラー」でfunctions.phpが保存できなかった方法。
- WordPress上書き保存
wordwress.orgからWordPressをダウンロードして解凍。解凍したファイルをFTPで上書きアップロード。WordPress本体が原因ならこれで解決するのかと思いましたが結局ダメ。
テーマの再インストールも考えましたが、公式テーマに変更して、しかも何もいじってない初期の状態でfunctions.phpの更新だけしても「致命的なエラー」でダメだったのでテーマの上書きインストールは意味ないと考えました。
WordPress新規インストールで解決。既存記事はデータベースインポートと画像データアップロード
functions.phpの「致命的なエラー…」は結局、WordPress新規インストールで解決しました。
ただ、記事を手作業で作り直すのは大変なので、BackWPupプラグインでバックアップしたバックアップファイルから、データベースにインポートと画像ファイルをFTPでアップロードしました。