Warning: count(): Parameter must be an array or an object that implements Countable in 【ファイルパス】/wp-includes/post-template.php on line 284
count()関数に関して、PHP7.2からは警告だすからね。って変更がありました。
こんにちは、鹿屋でwebデザインやEコマース・通販のお手伝いをしているGrowcalのヒガシと申します。
お客様よりwordpressの引っ越し作業のご要望をいただき、対象サイトを確認したところ投稿ページに上記警告が表示されておりました。
私は、こうやって解決しました。
/wp-includes/post-template.php:284行目
Before
if ( $page > count( $pages ) ) // if the requested page doesn't exist
$page = count( $pages ); // give them the highest numbered page that DOES exist
After:is_arrayで配列かどうかチェックして条件分岐
if (is_array($pages)) {
if ( $page > count( $pages ) ) // if the requested page doesn't exist
$page = count( $pages ); // give them the highest numbered page that DOES exist
}
原因は、PHP7.2からcount()で警告を出すように変更があった。
PHPにもバージョンというものがあります。wordpressやレンタルサーバーが「PHP7.2だよ早いしオススメだよ。切り替えてみてね」っていうのをみてバージョンアップしたりすると、突如冒頭のような警告が出るようになります。
これは、PHP7.2でcount()関数に関して、下記の様な仕様変更があったからです。
http://php.net/manual/ja/function.count.php
count() will now yield a warning on invalid countable types passed to the array_or_countable parameter.
ざっくり、「count()は、無効な値に対して警告出すようになりました。」とのこと。
これまでのverでは、count(NULL)に対して0を返してたようですが、PHP7.2から警告を出すようになりました。それが、
Warning: count(): Parameter must be an array or an object that implements Countable in 【ファイルパス】/wp-includes/post-template.php on line 284
警告:count() の引数には、配列、もしくはカウントできるオブジェクトじゃないとだめだよ。
【ファイルパス】/wp-includes/post-template.php の 284行目のことだよ。
ってな感じです。
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( $pages ) ありますね。この突如現れる$pagesが配列もしくはカウントできるオブジェクトじゃないから、警告が出るようになったんですね。
つまり、countを使いたいなら、もし、配列もしくはカウントできるオブジェクトだったら284行目が実行するようにすればいいってことです。
配列だったら284行目を実行、nullじゃなかったら実行とかにすれば解決。
今回のwordpressの284-5行目の場合は、NULLではない、emptyではないなら実行すればいいので、
if ( ! empty( $pages ) ) {
284行目
285行目
}
で、良いと思います。もしかしたら最後の行を
} else {
$page = 0;
}
とかしたほうがいいのかな。
まぁ私は冒頭の方法で解決しました。
if (is_array($pages)) {
if ( $page > count( $pages ) ) // if the requested page doesn't exist
$page = count( $pages ); // give them the highest numbered page that DOES exist
}