Warning: urldecode() expects parameter 1 to be string, array given in /www/wordpress/wp-includes/query.php on line 1893
WordPressでこんな警告が表示されたときの
対処方法の1例について説明します。
「文字列がくるべきところに配列がきてるよ?
問題の該当箇所は query.php の 1893 行目ね。」
と警告されています。
私が遭遇したケースでは
警告が出た WordPress のバージョンを見ると 4.3.7 。
警告が発っせられた関数は parse_tax_query でした。
最新の WordPress のバージョンは 4.7.1 。
同関数は wp-includes/class-wp-query.php に記述されています。
比較して見ると3ヶ所に差分がありました。
上図のように、1つめの差分はコメントにあります。
上図のように、2つめと3つめの差分はコードです。
いずれも値を『配列』を『カンマ(,)区切りの文字列』へと変換しています。
ということは
wp-includes/query.php
の対応箇所にそれぞれ
// If querystring 'cat' is an array, implode it.
if ( is_array( $q['cat'] ) ) {
$q['cat'] = implode( ',', $q['cat'] );
}
// If querystring 'tag' is array, implode it.
if ( is_array( $q['tag'] ) ) {
$q['tag'] = implode( ',', $q['tag'] );
}
を追記 (引き写し) すれば問題は解決です。
古いバージョンでは
'1,2,3,4'
のようなカンマ区切りの文字列
のみが変数の値として許容されていました。
ということは、古いバージョンにあわせて
作られたプログラムは、値として、必ず
カンマ区切りの文字列を使うと考えられます。
上記のようなコードを追記しても、
旧バージョン向けのプログラム群は、そもそも
値として配列を使うことはないため、
追記によって各種プログラムの挙動が
変わることはなく、互換性は維持されます。
それと共に、新バージョンで新たに許容された
array(1,2,3,4)
のような配列についても、追記したコードが
旧バージョンと同様のカンマ区切りの文字列へと
変換してから処理を進めるため、
問題なく取り扱えるようになります。
WordPress のバージョンアップをするのが
この警告への望ましい対処方法なのですが、
なんらかの事情によって、今はバージョンアップ
できないという場合には、こんな対処方法も考えられます。
警告が出ている位置によって対処方法は異なると思います。
たまたま、私が遭遇したところ同じところで警告が出ている
場合は、こんな方法もありますということで。