ワードプレスで突如として表示される『Warning』のメッセージ。人によってさまざまだとは思いますが、ほとんどの場合、個別ページのヘッダー直下(もしくはヘッダー部分)あたりにメッセージが表示されると思います。以下のようなメッセージですね。
Warning: count(): Parameter must be an array or an object that implements Countable in /ドメイン名/wp-includes/post-template.php on line 284
このエラーメッセージは『post-template.phpというファイルの284行目にエラーがあるよ』という意味ですが、エラーがあるといわれてもどうすりゃいいのよ?って人は多いと思います。
僕がこのエラーに遭遇したときには、探してもなかなか情報が出てきませんでした。ですので、ここでこのエラーに対する対処法を備忘録の意味も込めてまとめておきたいと思います。
※それにしてもめっちゃ長いタイトルですね(笑)
エラーの原因はphpのバージョン
このエラーが起きる原因はphpの新しいバージョンとテンプレートの愛称によるものです。
php7.2以降にからphpの一部の関数に変更があり、それが原因で今までエラーを起こさなかったテンプレートもエラーを起こすようになったみたいですね。
具体的には以下のようにcount関数の部分で変更が行われました。
詳細はPHP公式サイトを参照。
(※ちなみに、phpのバージョンによるエラーということなのでサーバーでphpのバージョンを7.2より昔のものに下げればエラーは改善します。ただし、推奨はしません。)
具体的な対処法
エックスサーバーでWordPressを使っていることを前提に話をしますが、どのサーバーでも有名どころであれば同じ感じだと思います。
まず、エラーメッセージに表示されているファイルを開きます。
『Warning: count(): Parameter must be an array or an object that implements Countable in /(ここには各環境のパスが表示)/wp-includes/post-template.php on line 284』
と表示されている場合には、
Warning: count(): Parameter must be an array or an object that implements Countable in
の後の『ドメイン名/wp-includes/post-template.php』の部分がファイル名です。
エックスサーバーの場合には、ファイルマネージャーというところからファイルにアクセスすることができます。
まずは問題を起こしているドメインを選択します。
次にテンプレートに関するファイルが入っている『public_html』というファイルを選択します。
エラーメッセージには『ドメイン名』の中の『wp-includes』と書いてあるので、『wp-includes』をクリックします。
次もエラーメッセージにある通り、『wp-includes』の中の『post-template.php』ということで、『post-template.php』をクリックします。
するとダウンロードを許可するかどうかのメッセージが出てくると思うので、そのまま分かりやすい場所にダウンロードしてください。(デスクトップに保存するのがおすすめ)
テキストエディタで『post-template.php』を編集
ダウンロード出来たら次はエラーを起こしている『post-template.php』を編集していきます。間違っても良いように、『post-template.php』は編集前にバックアップを取っておくことをおすすめします。
テキストエディタであれば何でもいいですが、おすすめはちゃんと行番号が表示されるものです。例えば、『TeraPad』とかがおすすめです。
→TeraPadのダウンロードはこちら
テキストエディタが用意出来たら、『post-template.php』をテキストエディタで開いてください。
TeraPadで開くと、こんな感じになっているはずです。
正常に開けたら、エラーメッセージに表示されている行番号のところを見てください。冒頭のエラーメッセージの場合だと、284行目ですね。
ここで注意なんですが、テキストエディタの設定で自動改行の設定にチェックが入っていると行数がズレます。
TeraPadの場合だと、上部のメニューから『表示』→『80桁で折り返し』のところにチェックが入っていないかどうかを確認します。チェックが入っていたらチェックを外してください。
エラーメッセージに指定されている行番号のところを見ると、おそらく以下のように記述されているはずです。(『ソースを表示』をクリックで表示)
if ( $page > count( $pages ) ) // if the requested page doesn't exist $page = count( $pages ); // give them the highest numbered page that DOES exist
これを以下のように書き替えます。
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; }
書き換えるというか、変更前のところを選択して上の記述をペーストすればいいです。
編集が完了したら上書き保存して再度サーバーにアップロードします。
アップロード完了後、サイトを更新してエラーメッセージが消えていればOKです。
おそらく、Warningのメッセージが表示されていて、エラーを起こしている部分が『post-template.php』である場合にはほとんどこのような症状だと思うので、ぜひ参考にしてみてください。