LoginSignup
1
3

More than 3 years have passed since last update.

MW WP Formの自作バリデーション

Last updated at Posted at 2020-01-27

前提

とある案件で「MW WP Form」を使って多言語対応のフォームを作成する必要があったのですが、標準のバリデーションには「半角英数字」はあるけど「半角英数字記号」がない...。
では自作しよう!という事で個人的メモです。

バージョンなど

PHP 7.3.2
WordPress 5.3
MW WP Form 4.2.0

functions.phpを編集

plugins/mw-wp-form/classes/validation-rules/以下に色々標準バリデーションの設定ファイルがあるので参考にしましょう。

functions.php

/**
 * MW WP From 自作バリデーション
 */
function mwform_validation_rule_alphaNumericsymbols( $validation_rules ) {
    if ( ! class_exists("MW_Validation_Rule_AlphaNumericSymbols") ) {
        class MW_Validation_Rule_AlphaNumericSymbols extends MW_WP_Form_Abstract_Validation_Rule {
            /**
             * バリデーションルール名を指定
             *
             * @var string
             */
            protected $name = 'alphanumericsymbols'; //半角英数字記号
            /**
             * バリデーションチェック
             *
             * @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( '/^[!-~\s]+$/', $value ) ) {
              $defaults = array(
                  'message' => __( 'Please type using half-width characters.', '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_AlphaNumericSymbols();
    $validation_rules[$instance->getName()] = $instance;
    return $validation_rules;
}
add_filter( 'mwform_validation_rules', 'mwform_validation_rule_alphaNumericsymbols' );

記号が入力できるようになった!

管理画面にはこんな感じ↓で追加されます
chrome-capture.jpg

参考:
https://nekomiblog.com/mw-valid/
http://ecvoo.info/?p=175

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3