yak shaving life

遠回りこそが最短の道

WordPressで Object of class WP_Error could not be converted to string in と Warning: count() を直した

普段ほとんど触らないWordPressだけど、ちょっとエラーを直す機会があったのでメモ。

Object of class WP_Error could not be converted to string in

こいつのせいでFatal Errorになってページが表示できない状態になっていた。 テーマが悪いのかなんなのかよく分からんが適当にググっていると、どうやらget_term()の返り値がWP_Error型になっているのに文字列として扱おうとしてエラーになってるっぽい。これだから動的型付け言語は…。(嘘ですPHP好きです)

というわけで、テーマのソースコードをサーバ上でゴリッと書き換えた。これで良いのかは知らんけど動いてるからとりあえず良いでしょう。

if (!is_wp_error(get_term($hoge, $fuga))) {
  // 元々あった処理
}

Warning: count(): Parameter must be an array or an object that implements Countable

お次はこっち。PHP 7.2でcount()の仕様が変わって、Countableを実装してないオブジェクトが引数として渡されるとWarningが出るようになったらしい。知らなかった。ていうか勝手にPHPのバージョン上げんなや。(嘘ですレン鯖好きです)

今回はnullが渡ってきたときに問題になってたっぽいので、適当にempty()でチェックしておいた。これで良いのかは知らんけど動いてるから(略)

if (!empty($foo)) {
  // 元の処理、count($foo)が含まれている
}

所感

両方ともエラーなりnullの時の処理が問題だったので、シンプルにスキップするようにした。これによってhtmlの要素が減っちゃう気もするけどパッと見大丈夫そうだった。PHPにおけるエラー処理が如何に大変かが分かりますね。ちゃんとユニットテストを書きましょう。(WordPressテーマにUTとかあるのか…?)

別に仕事でやってるわけじゃないので雑にやっつけたけど、結構時間がかかってしまった。これがもし仕事だったらどうするのが正解だったのだろう。git管理とかしないだろうし、やっぱりサーバ上でvi開いてゴリッとソースいじっちゃうのかな。まあ今のところWordPressをお仕事にする予定はないので深く考えないようにしよう。南無阿弥陀仏