WordPressで次のようなエラーメッセージが出た時の対処方法です。
Warning: count(): Parameter must be an array or an object that implements Countable in … /wp-includes/post-template.php on line 284
方法は2つあります。
サーバーのPHPバージョンを切り替える(非推奨)
このエラーが出てしまったのは、PHPのバージョンが7.2になってcount関数の仕様がちょっと変わったことが原因です。サーバーのアップデートでPHPバージョンが上がった時になどに出ます。
なので、Wordpressを運用しているサーバーの管理画面にアクセスし、PHPバージョンを切り替えるだけで解消します。
※パフォーマンスとセキュリティの両面から、PHPの古いバージョンの使用は勧められません。WordPressはPHP7.3を推奨しており、2019年末にはPHP5がサポートされなくなります。(2019年5月追記)
Xserver(エックスサーバー)の場合はこちらの手順になります。
サーバーパネルにログインし、「PHP Ver.切替」をクリック
該当するドメインを選択
PHPバージョンを切り替える
「変更後のバージョン」のセレクトボタンをクリックして「PHP5.6.36」を選択したら、右の「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;
}
これでエラーが消えました!
コメント