こんにちは
mwform_validation_rules フィルターフックでバリデーションルールを追加できるので、これを利用するのはどうでしょうか?
https://plugins.2inc.org/mw-wp-form/filter-hook/mwform_validation_rules/
ありがとうございます、大変助かりました。
以下のソースコードで、テキスト&テキスト、テキスト&チェックボックスはいづれか必須という条件でのバリデーションは実現することができました。
しかし、チェックボックス&チェックボックスだと動作しないようです。
何か、追記なりすれば動作するのでしょうか?
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' );
}
バリデーションを適用する項目が、チェックボックスの場合に動作しませんでした。
不具合を修正しましたのでお試しください。
ありがとうございます。
チェックボックス&チェックボックス、テキスト&チェックボックスでの動作は確認できましたが、今度はテキスト&テキストで動作しませんでした。
度々恐れ入りますが、解決策等あればご教示お願いします。
度々すみません。今度は大丈夫だと思います。試してみてください。
マルチポスト
https://teratail.com/questions/213639
どちらでも構いませんがどちらか一方をクローズ(解決済み)してください。