サポート » プラグイン » 「mw wp form」でテキスト項目とチェックボックスでどちらかが入力されたら必須判定したい

  • 解決済 tnaka

    (@tnaka)


    お世話になります。

    WP初心者ですが、会社のサイトのお問い合わせを
    mw wp form を利用し、作成しております。

    テキストとチェックボックスで、どちらかが入力されていればOKといった、必須項目を付けたいと思い、バリデーションルールを考えていますが、やり方がわかりません。
    function.phpで何かしらの記述が必要なのでしょうか?

    参考に似たようなことをしているサイトを「ヘルプの必要なページへのリンク」に貼り付けています。
    添付サイトの
    「利用希望施設・体験」や「交通手段」が私がやりたい事と同じかと思います。

    できれば「どちらか」の項目ではなく「どれか」の複数項目にも対応できるやり方があればそちらもご教示いただければと思います。

    よろしくお願いいたします。

    • このトピックはtnakaが4年、 7ヶ月前に変更しました。

    ヘルプの必要なページ: [リンクを見るにはログイン]

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • こんにちは

    mwform_validation_rules フィルターフックでバリデーションルールを追加できるので、これを利用するのはどうでしょうか?
    https://plugins.2inc.org/mw-wp-form/filter-hook/mwform_validation_rules/

    手前味噌ですみませんが、以下でいかがでしょう?
    https://xakuro.com/blog/wordpress/1991/

    トピック投稿者 tnaka

    (@tnaka)

    ありがとうございます、大変助かりました。

    以下のソースコードで、テキスト&テキスト、テキスト&チェックボックスはいづれか必須という条件でのバリデーションは実現することができました。

    しかし、チェックボックス&チェックボックスだと動作しないようです。

    何か、追記なりすれば動作するのでしょうか?

    if ( class_exists( 'MW_WP_Form_Abstract_Validation_Rule' ) ) {
    	class MW_WP_Form_Validation_Rule_AnyRequired extends MW_WP_Form_Abstract_Validation_Rule {
    		protected $name = 'anyrequired';
    
    		public function rule( $key, array $options = array() ) {
    			$value = $this->Data->get( $key );
    			if ( ! is_null( $value ) ) {
    
    				$targets = array_map( 'trim', explode( ',', $options['target'] ) );
    				$targets[] = $key;
    
    				$count = 0;
    				foreach ( $targets as $target ) {
    					$target_value = $this->Data->get( $target );
    					if ( ! empty( $target_value ) || ! MWF_Functions::is_empty( $target_value ) ) {
    						$count++;
    					}
    				}
    				if ( $count == 0 ) {
    					$defaults = array(
    						'target' => null,
    						'message' => sprintf( '%s のいずれも未入力です。', implode( ', ', $targets ) )
    					);
    					$options = array_merge( $defaults, $options );
    					return $options['message'];
    				}
    			}
    		}
    
    		public function admin( $key, $value ) {
    			$target = '';
    			if ( is_array( $value[$this->getName()] ) && isset( $value[$this->getName()]['target'] ) ) {
    				$target = $value[$this->getName()]['target'];
    			}
    			?>
    			<table>
    				<tr>
    					<td>いずれか必須項目</td>
    					<td>
    						<input type="text" value="<?php echo esc_attr( $target ); ?>" name="<?php echo MWF_Config::NAME; ?>[validation][<?php echo $key; ?>][<?php echo esc_attr( $this->getName() ); ?>][target]" />
    						<span class="mwf_note">(カンマ区切り)</span>
    					</td>
    				</tr>
    			</table>
    			<?php
    		}
    	}
    
    	function mwform_validation_rule_anyrequired( $validation_rules ) {
    		$instance = new MW_WP_Form_Validation_Rule_AnyRequired();
    		$validation_rules[$instance->getName()] = $instance;
    		return $validation_rules;
    	}
    
    	add_filter( 'mwform_validation_rules', 'mwform_validation_rule_anyrequired' );
    }

    バリデーションを適用する項目が、チェックボックスの場合に動作しませんでした。
    不具合を修正しましたのでお試しください。

    トピック投稿者 tnaka

    (@tnaka)

    ありがとうございます。

    チェックボックス&チェックボックス、テキスト&チェックボックスでの動作は確認できましたが、今度はテキスト&テキストで動作しませんでした。

    度々恐れ入りますが、解決策等あればご教示お願いします。

    度々すみません。今度は大丈夫だと思います。試してみてください。

    マルチポスト
    https://teratail.com/questions/213639

    どちらでも構いませんがどちらか一方をクローズ(解決済み)してください。

    トピック投稿者 tnaka

    (@tnaka)

    動作が確認できました!

    なんどもご教示いただきありがとうございました!

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「「mw wp form」でテキスト項目とチェックボックスでどちらかが入力されたら必須判定したい」には新たに返信することはできません。