WebDesigner's Memorandumウェブデザイナーの備忘録

PHP7.2のWordPressでWarning: count(): Parameter must be an array or an object that implementsが表示された時の治し方

PHP7.2でWordPressを使用していると、「Warning: count(): Parameter must be an array or an object that implements Countable in …サイトのURL/wp-includes/post-template.php on line 284」とエラーメッセージが表示されることがあります。

今回はその治し方についでです。

post-template.phpの修正

治すには「wp-includes/post-template.php」を開きます。
284行目付近が下記のようになっていると思います。

// If post password required and it doesn't match the cookie.
  if ( post_password_required( $post ) )
  return get_the_password_form( $post );

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

それを下記のように変更すればエラーメッセージは消えます。

// If post password required and it doesn't match the cookie.
  if ( post_password_required( $post ) )
    return get_the_password_form( $post );
  if ( ! empty( $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;
  }

原因

PHP7.2からcount関数の仕様が変更されました。
今まではcount(NULL)では何もなく0を返していましたが、PHP7.2からはWarningになるみたいです。

count() will now yield a warning on invalid countable types passed to the array_or_countable parameter.

PHP: count – Manual

今回の場合はcount($pages)の$pagesの値が空(NULL)になっていたため、エラーになってしまいました。
ですから、if(!empty)で空ではないという条件を加えて、回避したというわけです。

著者について

プロフィール画像

サイトウ マサカズ@31mskz10

1997年生まれ。2016年から専門学校でデザインについて勉強。卒業後は神戸の制作会社「N'sCreates」にウェブデザイナーとして入社。このブログでは自分の備忘録も兼ねて、ウェブに関する記事や制作環境を効率的に行うための記事を書いています。

Twitterをフォロー Facebookでいいね