Fatal errorが解消!

Fatal errorが解消

先日から発生していたFatal errorが解消しました。最初はプラグインとテーマの相性かと思ってましたがそうではなかったようです。Buddy Pressのプラグインによって追加された拡張プロフィールの項目で右袖にFatal errorという警告とともに「Uncaught ValueError: Missing format specifier at end of string in/*****/******/…」と表示されており、プロフィール情報が見れない状態となってしまっていました。

結論から話すと、プラグインファイルエディターでBuddy Pressの一部コードを修正することで解消しました。もし今後誰かの参考になったら幸いですので、やったことを記載しておきます。

まず問題になっているBuddy Pressの対象コードの操作は、はじめFTPで接続してPHPファイルをローカルに落としまして編集しようとしましたが、WordPressの管理画面からプラグインファイルエディターで直接編集できることに気付いたので、実際の操作はこちらから行いました。
編集するプラグインのプルダウンからBuddy Pressを探し選択ボタンを押します。右袖にディレクトリが表示されるので今回問題になっていた「bp-members > classes > class-bp-members-admin.php」までアクセスしてコードを表示させます。ここのファイルがエラーになってるよ、というのはエラー内容から把握できていました。

このファイルの1272行目が問題になっているとのメッセージだったので、対象のコードを確認します。すると元のコードはこのようになっています。

printf( __( 'Last active: %1$s', 'buddypress' ), '<strong>' . $date . '</strong>' );

それを次のように修正しました。

printf( __( 'Last active: %s', 'buddypress' ), '<strong>' . $date . '</strong>' )

これでエラーは解消しました。恥ずかしながら、なぜこれで直ったのかは説明できません。
ピンポイントの記事というはなかったのですが、WordPressのQAや別テーマで発生した同様のエラーメッセージの対処法で「%」を消してみるという回答が多かったので、修正前のコードに含まれていた「%」を削除してみました。するとエラーが解消し、本来表示されるはずだった日時情報が表示されました。ただ、それでも余計な「1」という文字が残っていたのでついでに「1」も削除したら正常なフォーマットに戻った、という流れです。

PHPの勉強をしていないので、本来はprintf()で「%1」は数値のフォーマットを指定するパラメーターっぽいのですがなぜ今回は不要になったのか、なぜ元のコードには「%1」が含まれていたのか分かりません。

と、ここまで文章を書いてふと閃きました。
もしかしたらブログ更新日などの表示形式をデフォルトからYYYY年MM月DD日といった形に変更しました。YYYY-MM-DDだと2バイト文字も含まれておらず、数値として扱えるからエラーにならなかったけど日本語を混ぜたからエラーになったとか…なんですかね。

とりあえずこの問題は解消できたので、また次へ進めそうです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次