WordPressで「Warning: count()…」のエラーが出た時の対処方法

WordPressで次のようなエラーメッセージが出た時の対処方法です。

Warning: count(): Parameter must be an array or an object that implements Countable in … /wp-includes/post-template.php on line 284

方法は2つあります。

  1. サーバーのPHPバージョンを切り替える
  2. 該当するPHPファイルを修正する

サーバーのPHPバージョンを切り替える(非推奨)

このエラーが出てしまったのは、PHPのバージョンが7.2になってcount関数の仕様がちょっと変わったことが原因です。サーバーのアップデートでPHPバージョンが上がった時になどに出ます。

なので、Wordpressを運用しているサーバーの管理画面にアクセスし、PHPバージョンを切り替えるだけで解消します。

※パフォーマンスとセキュリティの両面から、PHPの古いバージョンの使用は勧められません。WordPressはPHP7.3を推奨しており、2019年末にはPHP5がサポートされなくなります。(2019年5月追記)

Xserver(エックスサーバー)の場合はこちらの手順になります。

サーバーパネルにログインし、「PHP Ver.切替」をクリック

サーバーパネル画面

該当するドメインを選択

ドメイン名を選択する

PHPバージョンを切り替える

「変更後のバージョン」のセレクトボタンをクリックして「PHP5.6.36」を選択したら、右の「PHPバージョン切替」ボタンをクリックします。

PHPバージョンを変更する

これでエラーは出なくなります……が、Wordpressのアップデートでこのエラーが解消されるようになったらバージョンを戻したほうが良さげ。

ファイルをいじれるのであれば、次の方法でコードを修正してスッキリ解決しましょう! こっちも簡単です。

月額900円(税抜)から、高速・多機能・高安定レンタルサーバー『エックスサーバー』

該当するPHPファイルを修正する

エラーメッセージで表示されているエラー個所を見てみましょう。
上のエラーだと、wp-includesフォルダの中にある post-template.php の 284行目ですね。

if ( $page > count( $pages ) ) // if the requested page doesn't exist
$page = count( $pages ); // give them the highest numbered page that DOES exist

この count は配列(オブジェクト)の要素数を数えるの関数なので、引数に配列を渡さないといけないのですが、以前のPHPバージョンでは NULL を渡しても黙って 0 を返してくれました。

ところが、PHP7.2では配列以外の値を渡すと Warning を出す仕様に変更されました。それで、以前は成立していた部分でエラーが出るようになったというわけです。

ということなので、$pages の中身がある場合だけ上記の処理を実行し、中身が空だったら $page に 0 を代入する処理を追加します。

if( isset( $pages ) ){
if ( $page > count( $pages ) ){ // if the requested page doesn't exist
$page = count( $pages ); // give them the highest numbered page that DOES exist
}
}else{
$page = 0;
}

これでエラーが消えました!

スポンサーリンク
スポンサーリンク
Wordpress
codeisleをフォローする

コメント

タイトルとURLをコピーしました