WordPressで独自のオプションページとか、プラグインの設定画面なんかを作っている時って、簡易的なものならば1ファイルで「入力処理」と「保存処理」を書いてしまったりしますよね。
で、大抵はフォームのデータと一緒に input type=”hidden” でフラグを送信してあげることで保存処理をするタイミングなのか、フォームを表示するタイミングなのかを判別することになると思います。
例えば、こんなかんじ?
1 2 3 4 5 6 7 8 9 |
<?php if ($_POST['mode'] == 'save' : ?> // ここに保存処理 <?php else: ?> <form action="<?php esc_attr($_SERVER['REQUEST_URI']); ?>" method ="post"> (中略) <input type="hidden" name="mode" value="save"> <input type="submit" value="保存"> </form> <?php endif; ?> |
これで、ちゃんと保存処理を書けばうごくんですけども、1つ問題があります。
Notice: Undefined index が表示される
このままでもスクリプトは動きますが、画面上部に、「Notice: Undefined index (以下略)」といったエラーが表示されてしまいます。
これはどういう時に起きるのかというと、
未定義の配列を参照しようとしてるときに「そんなのないよー」と言ってくれてるのですね。
ちなみに未定義の変数を使おうとすると 「Notice: Undefined variable」となります。
Notice: Undefined index を回避するには
最初にページに入った時点ではフォームのデータが送信されていないため、 $_POST[‘mode’] は存在しませんのでエラーになってしまうんですね。
なので、これが存在するかをチェックして、ある場合は処理させるというふうにすればOKです。
1 2 3 |
<?php if (isset($_POST['mode'] && $_POST['mode'] == 'save') : ?> // 保存処理 <?php endif; ?> |
みたいな感じですかね?
あるいは、こんな書き方でもいいかもしれません。
1 2 3 4 5 6 |
<?php $mode = (isset($_POST['mode'])) ? $_POST['mode'] : null; if ($mode == 'save') : ?> // 保存処理 <?php endif; ?> |
自分はこの方法をよくつかいます。
よかったら参考にしてください。
ちなみに…
PHPのこの手のエラーにはいくつかの段階が有り、
Parse error , Warning , Fatal error , Notice などがあるのですが、そのうち Notice はほかのエラーと比べるとそこまで致命的なエラーではなく、動作が停止しない場合も多いです。
実際 php.ini の初期設定では Notice エラーは表示されません。
なので、設定で非表示にしてしまっても構わないのかもしれませんが…確実にしっかりと作っていきたいならこのへんも解消しておきたいですね。
WordPressも通常のモードでは表示されませんが、wp-config.php で WP_DEBUG を true にしてあげると表示されるようになります。
WP_DEBUG がオンになっていると、非推奨になったタグなんかも教えてくれるのでテーマやプラグインを作る際のテスト環境では常に ON にしておく癖を付けたいですね。
コメントする