MWWP 独自バリデーションの追加

MWWP 独自バリデーションの追加

概要

MW WP Form で独自バリデーションを追加し、チェックボックスでバリデーションルールを選択/追加できるようにするカスタマイズです。
MW WP Form のフィルターフックmwform_validation_rulesを使って実装していきます。(公式リファレンス

実装

各時変更が必要な部分と注意事項は以下になります。

  • バリデーションルールのオブジェクトが入っている配列引数($validation_rules)に新しいオブジェクトを追加する形で実現する
  • MW_WP_Form_Abstract_Validation_Ruleクラスを継承する必要があります。
  • protected $nameにバリデーションルール名を指定します。(任意の識別子)
  • public function rule内でバリデーションルールを追加します。
  • $defaultsmessageに期待しない入力値の場合に表示するエラーメッセージを設定します。
  • public function adminで管理画面のMW WP Formページで、通常バリデーションを設定するチェックボックス一覧に今回追加するルールの項目を追加する
<?php

/**
 * 自作バリデーション追加
 * @param array $validation_rules バリデーションルールオブジェクトの配列
 */
function mwform_validation_check_at_sign($validation_rules)
{
    // 追加するバリデーションルールのオブジェクトは MW_Validation_Rule クラスを継承している必要があります。
    if (!class_exists('MW_Validation_Rule_CheckAtSign')) {
        class MW_Validation_Rule_CheckAtSign extends MW_WP_Form_Abstract_Validation_Rule
        {
            /**
             * バリデーションルール名を指定
             * @var string
             */
            protected $name = 'check_at_sign';

            /**
             * バリデーションチェック
             * @param string $key name属性
             * @param array  $option
             * @return string エラーメッセージ
             */
            public function rule($name, array $options = array())
            {
                // 追加したいバリデーションの処理
                $value = $this->Data->get($name);
                if (!MWF_Functions::is_empty($value)) {
                    if (preg_match('/@/', $value) || !preg_match('/^[0-9a-zA-Z_.-]+$/', $value)) {
                        $defaults = array(
                            'message' => __('メールアドレスの形式が間違っています', 'mw-wp-form'),
                        );
                        $options  = array_merge($defaults, $options);
                        return $options['message'];
                    }
                }
            }

            /**
             * 設定パネルに追加
             * @param int   $key   バリデーションルールセットの識別番号
             * @param array $value バリデーションルールセットの内容
             */
            public function admin($key, $value)
            {
?>
                <label>
                    <input type="checkbox" <?php checked($value[$this->getName()], 1); ?> name="<?php echo MWF_Config::NAME; ?>[validation][<?php echo $key; ?>][<?php echo esc_attr($this->getName()); ?>]" value="1" />
                    <?php esc_html_e('アットマークチェック', 'mw-wp-form'); ?>
                </label>
<?php
            }
        }
    }

    $instance = new MW_Validation_Rule_CheckAtSign();
    $validation_rules[$instance->getName()] = $instance;
    return $validation_rules;
}
add_filter('mwform_validation_rules', 'mwform_validation_check_at_sign');

おわりに

自分の場合はメール入力欄でアットマークの前後を別々に入力させないといけない状況で、ユーザーの中には確認用の入力欄と間違ってフルのメールアドレスを入力する場合があったので、それを防ぐために簡易的ですがアットマークとメールアドレスのチェックを行うバリデーションを追加しました。基本的にHTML5とJavaScriptでバリデーションを実装することもあると思いますが、ブラウザのJavaScriptを切った状態でアクセスされた場合や、スパムメール対策などでは筒抜けの状態になってしまうので、サーバー側で入力値のチェックを行うのはセキュリティ対策としても有効ですね。

参考にしたサイト

phpカテゴリの最新記事

%d人のブロガーが「いいね」をつけました。