あるWPのプラグイン開発をしているときのこと。
ふとWPの管理画面に入ると、上部にワーニングエラーが表示していた。
Warning: Undefined array key "*******" ~なんちゃら
*******はある配列のキー名を指しています。
内容として、対象の配列には指定のキー名ないよーということ。グローバル変数に当たる変数を指しており、他の関数にも使うために用意してた大事な変数なんですが、なぜ初期化で準備しているのに、無いというエラーが・・・
プラグインが最初に読み込むファイルの上部に以下のような設定で初期化していました。
global $dbtable;
$dbtable = array('table' => $wpdb->prefix."_plugin");
このように指定していたのですが、エラーではそのtableというキー名がないというのです。
なんか変だなと思ってvar_dump()で確認してみました。すると、
var_dump($table);
// 結果
array(1){["test"] => string(7)"〇〇〇〇〇〇〇"}
ん?testといキー名で設定してないぞ?
疑問を感じて色々試してみたところ、意味が分かりました。
これは、別のプラグインで同じ変数名でグローバル変数に設定していて、そのプラグインが初期設定のデータでした。
インストールしているプラグインをまずすべて無効化にし、ひとつずつ有効にしてみた結果でした。
自分の環境で開発し、また、テンプレートとして利用したひな形を使いまわししてるので変数名が重なり、同じWP内で有効にしたため起きた不具合でした。
変数名を変更したら解消しました。
これは関数名でも起きるようです。
ちなみに、文字列をエスケープするために、以下のような関数名を用意していました。
function h($s) {
return htmlspecialchars($s, ENT_QUOTES, "UTF-8");
}
すると、同じ関数がありますというエラーが生じたのです。そうです、他プラグイン開発でもこの関数を用意していたため、PHPで怒られました。
ということで、プラグイン開発をする際は、他プラグインと関数名や変数名が重ならないようユニークな関数名を考えたほうがよさそうです。
今回は、自分の開発するプラグイン名の省略を頭につけたもので統一しました。