【WordPress】PHP7.2でエラーメッセージ『Warning: count(): Parameter must be an array or an object that implements Countable in …/wp-includes/post-template.php on line 284』が出た場合の対処法

  • LINEで送る
(タップ)つらいエピソード を読む

新しいブログを立ち上げようとしたら同じテンプレートなのにエラーが出て、つらい

もう1個ブログを立ち上げようとして、デザインを考えるのがめんどくさかったのでこのブログと同じデザインを流用しました。

当然エラーなんて出るはずなかったんですが、何か出てきました。

デバッグに4時間かかりましたよ。まったく。

もう1つブログを立ち上げる際にワードプレスのテーマをこのブログから流用したのですが、何故かエラーが出ました。(PHP7.2起因でした。)

エラーメッセージとしては

『Warning: count(): Parameter must be an array or an object that implements Countable in …(ブログより異なるファイルのパス)/wp-includes/post-template.php on line 284』

です。

デバッグに成功したので、取り急ぎ具体的な対処法をご紹介します。

続いて、解説も記しますので知識のある方は読んでみてください。


スポンサードリンク

具体的な対処法

ここでは、具体的な対処作業を説明します。解説は次項です。

Step.1 下記パスのファイルを探す

エラーメッセージで出てきた

『…(ブログより異なるファイルのパス)/wp-includes/post-template.php』

というファイルを探します。

私の場合はエックスサーバーのサーバーを使っているのでWEBFTPでファイルを探しました。

※編集に先立ち、一度ファイルをコピーして保存しておきましょう。操作を間違えても復旧できます。

Step.2 ファイルの下記の赤字部分を追加する

以下の部分のコード(function get_the_contentの中)の赤字部分を追加しましょう。

※{}の数などお気を付けください。追加分は{}×3つです。

function get_the_content( $more_link_text = null, $strip_teaser = false ) {
	global $page, $more, $preview, $pages, $multipage;

	(...途中省略...)

	// 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;
	}

	(以下省略...)

Step.3 保存してページを更新

上記のコードを追加したら保存してページを更新してみましょう。

エラーメッセージが出なくなるはずです。

私の場合はエックスサーバーのサーバーを使っているのでWEBFTPでファイルを直に編集してしまいました。文字コードはUTF-8(BOMなし)にしておきましょう。(WEBFTPではBOMの有無不明ですが問題は出ていません。)

これで作業は終了です。興味のある方は下記の解説もどうぞ。

解説

PHP公式サイトによれば、PHP7.2で count() 関数 の仕様が変更になりました。(エイリアスのsizeof()も同様)

具体的な変更としては

◆以前: count( NULL )となっていた場合 0 を返す。Warningは出さない。
◆7.2: count( NULL )となっていた場合Warningを出す。

です。

修正前のコードでは count( $pages ) の  $pages が宣言だけされて初期化される前に count() に代入されたことによりWarningが出たとみられます。

なので、以前と同じ挙動となるように count() に代入する前に empty() 関数でNULLかどうかを判別し、NULLだった場合 $pages = 0; となるように修正しました。

このブログのPHPバージョンは現時点(2018/7/7)では7.2ではないのでWarningが出ていませんが、新しく立ち上げた方は最新の7.2にしたので症状が発現したようです。

 

以上です。

参考になれば幸いです。


  • LINEで送る

スポンサードリンク

コメント

  1. この記事のおかげで直りました!投稿ありがとうございます!

  2. ひえ、なおりました。。。
    ありがとうございました^^

コメントを残す