教文館の社内ナレッジベースです。

custom-field-template.phpの修正

カスタムフィールドテンプレートプラグインが、php7.2ではエラーが出る。

エラー表示

Warning: count(): Parameter must be an array or an object that implements Countable in....

(パラメータは配列か、カウントできる機能が実装されたオブジェクトでなければならない)

だそう。

PHPの公式マニュアル

In PHP 7.2.0
count(NULL) returns a warning:
Warning: count(): Parameter must be an array or an object that implements Countable

In previous versions:
count(NULL) returned 0 without any warnings.

PHP7.1.0バージョンまではcount(NULL)に対して0を返していたが、PHP7.2からwarningを出しているということらしい。

count関数を使う場合は、変数の中身が配列またはオブジェクトの場合と、NULLを返す場合とで分岐させる必要がある。具体的には構文のなかではis_array関数を使い、演算の中では三項演算子を使うといい感じ。

調べた所2070行目のセレクト項についてのエラーっすね。(/plugins/custom-field-template/custom-field-template.php on line 2070)

具体的に2070行目を見ると

$ct_value = count($selected);

 

となっている。これではPHP7.2以降では $selectedの値がNULLの場合にエラーが出てしまうよね。

そこで、

$ct_value = $selected ? count($selected): 0;

と修正して、変数$selected の値がカウントできる場合とNULLの場合で結果が異なるようにした。$ct_valueの値について、条件式$selectedを評価し、TRUE(値が格納されている)であればcount($selected)、FALSE(値が格納されていない)であれば0を返す。

$A = $B ? count( $B ) : 0;
これは
条件式 ? 式1 : 式2
のこと。
条件式を評価し、TRUEであれば式1、FALSEであれば式2を返す。