WordPress カスタムフィールドに Warning:

この記事は約 5 分で読めます。

先日、
「ブログ上に意味不明文字出現」と言う
記事を書いたのですが、

同じような現象がカスタムフィールドで
起こりました。

どうしちまったんだ WordPress!

・・と嘆いている場合ではなく、
どうすればいいのか、
また具体的にどうしたか備忘録として残します。

Warning textの場所

まず、
Warning textの場所ですが、
投稿の編集画面
カスタムフィールドを追加: の上で、
内容としては、

Warning text

Warning: count(): Parameter must be an array or an object that implements Countable in /○○/○○/○○/○○/wp-includes/wp-db.php on line 2459

プラグイン WordPress Ping Optimizerが
だす警告文と同じですね。

2459行は

// Extract the column values
for ( $i = 0, $j = count( $this->last_result ); $i < $j; $i++ ) {

先の記事にも書きましたが、
WordPress Ping Optimizerの警告は

WordPress Ping Optimizerを
削除の容で解決いたしました。

プラグインなので必要性がなければ
削除も問題ないと思うのですが、

今回はWordPress本体のファイルでの警告、
削除って訳にはいきません。

PHPのバージョンを落とす

PHPのバージョンが絡んでいるのか、
試しにPHPのバージョンをPHP 7.1に
落としてみました。

警告文は消えます。

PHP7.2でエラーを出すって事になります。

じゃぁPHP 7.1でいいじゃん!って
事になりますが、

(さくらのレンタルサーバー)は、
PHP 7.1 (2019/1 提供終了予定) となっており、
解決にはならない・・・。

もっとも提供終了予定までに
WordPressがバージョンアップして、
エラーを修正してくれれば問題ないのですが、
絶対とは言えませんね。

解決策をググる

警告文を検索してみると
カスタムフィールドでの事例は
ほとんどありませんが、
警告文を消す修正方法が書かれた
記事がいくつか出できました。

しかし、どれも難しくて
とてもファイルをいじって直す気にはなれません。

その中でも

これならイケるかも!
と思った記事を発見しました。


この記事のエラー該当箇所の文字列が、
わたしのWordPressのエラー該当箇所の文字列に
かなりちかく、応用が利きそうです。

ファイルを修正する

上記の記事の中の

応急処置としては下記のように変更するといいかと思います。

$pingCount=count($this->cbnetpo_future_pings);

$pingCount = $this->cbnetpo_future_pings ? count( $this->cbnetpo_future_pings ) : 0;

これを参考に
わたしのエラー箇所を修正すると、

for ( $i = 0, $j = count( $this->last_result ); $i < $j; $i++ ) {
↓
for ( $i = 0, $j = $this->last_result ? count( $this->last_result ) : 0; $i < $j; $i++ ) {

これで警告文は消えました。

つまり、
WordPress Ping Optimizerも
この方法で直せたという事ですね。
 

CAUTION

もし、参考になれば幸いですが、
行う際はバックアップは必ずとってください。
わたしの場合はうまくいきましたが、
全ての環境で成功するとは限りません。
自己責任にて行ってください。

本体の修正はちょっと・・

ファイル本体の修正はやはりこわい
って場合は、

// 全てのエラー出力をオフにする
error_reporting(0);

上記を
子テーマの編集、
functions.phpに書いてください。
エラーが消えます。

しかし、
重要なエラー表示まで消してしまうのは
不安が残りますね。

上記リンクには
error_reporting() の例があります。

色々試してみるのもよいかもしれません。

// 致命的なエラーのみ表示する
error_reporting(E_COMPILE_ERROR | E_RECOVERABLE_ERROR | E_ERROR | E_CORE_ERROR);

//E_NOTICE(注意メッセージ)とE_DEPRECATED(推奨エラー)は表示しない
error_reporting(E_ALL & ~ E_DEPRECATED & ~ E_USER_DEPRECATED & ~ E_NOTICE);


こちらもすべて自己責任でお願いします。

最後に

貴重なお時間を割き、
最後まで
ご高覧いただきまして
有難うございました

 

WordPress カスタムフィールドに Warning: