本ブログは高機能テーマCocoonを使わせてもらっています。
このCocoonのバージョンを最新にアップデートしたところ、アーカイブページで何も表示されなくなり、HTMLを見ると「サイトに重大なエラーがありました。」と表示されていました。
私は色々とカスタマイズをさせてもらっているので、カスタマイズ箇所のどこが原因かを切り分ける為に、デバッグしてみました。
テーマを問題がないバージョンに戻す
Cocoonの場合、以下のページで戻し方の説明があります。
Cocoonは多くの情報を公開して頂いているので大変助かります。
私の場合、色々試したところ、1.9.2はエラーがでず、1.9.3からエラーが出ることがわかったので、一旦1.9.2に戻しました。
本番環境でブログが正しく表示されたことを確認のうえ、テスト環境でデバッグを開始します。
本番環境と、テスト環境の両方が同じ環境であるものとして説明をします
デバッグ
調べてみるとこちらにデバッグの方法が書いてありました。
WordPressに搭載されているデバッグモードに入れるために、テスト環境のwp-config.phpを編集します。
wp-config.php はWordPressをインストールしたルートディレクトリにあります。
念のため、オリジナルファイルを残しておくことをおすすめします。私の場合、wp-config.php を wp-config.php.org にコピーした上で、wp-config.php を編集しました。
変更前
define('WP_DEBUG', false);
変更後
define('WP_DEBUG', true);
私の場合、何故か画面上にエラー内容が表示されないので、ログを出力するために wp-config.php に以下を追加。
define( 'WP_DEBUG_LOG', true );
そうすると、/wp-content/debug.log にログが出力されたので、開いてみます。
[07-Mar-2020 00:00:00 UTC] PHP Fatal error: Uncaught Error: Call to undefined function get_category_title() in /var/www/html/color-code/wp-content/themes/cocoon-child-master/functions.php:14
:
エラー内容を見ると、私がカスタマイズしたfunctions.phpの14行目でエラーになっています。
functions.php の14行目を開いてみます。
if ($cat_id && get_category_title($cat_id)) {
ログの通り、get_category_title() を使っていました。このget_category_title()が未定義とのことなので、無くなっているようです。その原因を調べてみます。
検索すると以下の情報が見つかりました。
そこの関数は現在get_the_category_titleになっているはずです。
https://wp-cocoon.com/community/bugs/%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%83%BC%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%99%E3%82%8B%E3%81%A8%E3%80%8C%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AB%E6%8A%80%E8%A1%93%E7%9A%84%E3%81%AA%E5%95%8F%E9%A1%8C/
…
編集履歴を見てみると、get_category_titleが利用されているのは、1.9.2.3より前のバージョンになっています。
ソースコードの比較をせずに原因がわかったので助かりました。早速、修正をしてみます。
修正
get_category_title() を get_the_category_title() に修正してみます。
if ($cat_id && get_the_category_title($cat_id)) {
結果
テスト環境でエラーが出ずに無事に表示されるようになりました。
これで本番環境に適用させ、動作確認まで完了させればOKです。
まとめ
突然エラーで表示されなくなると何から手を付ければよいのかわからなくなります。しかし、デバッグモードを使って一つずつ原因を追っていけば解決できる可能性が高まります。
ハードルが高いと思ってしまうかもしれませんが、問題が発生した際にはお試しください。