わたしの場合は、レンタルサーバのPHPバージョンを7.2にして、自分のワードプレスサイトを見たらこんな感じになっていた。
エラーメッセージ内容
Warning: count(): Parameter must be an array or an object that implements Countable in /home/サイト名/public_html/wp-content/plugins/wordpress-ping-optimizer/cbnet-ping-optimizer.php on line 533
PHPのcount関数でWarningが出力されている。
PHPの警告表示っていつみてもいやな気分になりますね。サイトのトップ部分がこんな感じだとアクセスした人がすぐ移動しちゃうんじゃないかと…
エラーメッセージから得られる情報
エラー内容:count関数の引数が配列型か数値である必要がある
プラグイン名 | wordpress-ping-optimizer |
ファイル名 | cbnet-ping-optimizer.php |
行数 | 533 |
対処
実際にFTPソフトでワードプレスをインストールしたディレクトリにアクセスし、
wp-content >plugins >wordpress-ping-optimizer
を開くとエラーの出ているファイルcbnet-ping-optimizer.phpが見つかるので修正するためダウンロード。
実際にエラーの出ていた533行目付近のソースコードはこちら。
修正前のコード
// handle null before count if (is_null($this->cbnetpo_future_pings)) $pingCount=0; else $pingCount=count($this->cbnetpo_future_pings);
533行目は、else文の処理。ここで警告が出ている。
count関数の引数$this->cbnetpo_future_pingsが配列か数値ではないということになる。
530行目のif文でis_nullを使って$this->cbnetpo_future_pingsの中身がNULLだったときは、$pingCount = 0としていることから「空だったら」という判定をしたいようだ。
count関数は、配列の要素数を返す関数なので配列でなければ、$pingCount = 0とすれば良いので、修正内容は以下のようになる。
修正後のコード例1
if ( !is_array($this->cbnetpo_future_pings) ) $pingCount=0; else $pingCount=count($this->cbnetpo_future_pings);
念のため、is_nullより広範囲な「空だったら」の判定emptyも加えて
修正後のコード例2(推奨)
if ( !is_array($this->cbnetpo_future_pings) || empty($this->cbnetpo_future_pings) ) $pingCount=0; else $pingCount=count($this->cbnetpo_future_pings);
としてもいい。
修正後は、元の場所にアップロードする。
PHP7.2以降count関数の引数にCountable(数えられる)ものを指定しないとWarningが出るとのこと。