我认为我有很好的解决方法...
默认情况下,数字字段没有 minlength 和 maxlength 验证器。
您可以从 wp-content/plugins/contact-form-7/modules/text.php 复制它们
$atts['maxlength'] = $tag->get_maxlength_option();
$atts['minlength'] = $tag->get_minlength_option();
(在 wpcf7_text_form_tag_handler 函数中)...和验证过滤器
$code_units = wpcf7_count_code_units( stripslashes( $value ) );
if ( $maxlength && $maxlength < $code_units ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_too_long' ) );
} elseif ( $minlength && $code_units < $minlength ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_too_short' ) );
}
(在 wpcf7_text_validation_filter 函数中)
现在将其粘贴到 numbers.php 的正确位置。
所以在 wpcf7_number_form_tag_handler 函数中 atts 看起来像:
$atts['class'] = $tag->get_class_option( $class );
$atts['id'] = $tag->get_id_option();
$atts['tabindex'] = $tag->get_option( 'tabindex', 'signed_int', true );
$atts['min'] = $tag->get_option( 'min', 'signed_int', true );
$atts['max'] = $tag->get_option( 'max', 'signed_int', true );
$atts['step'] = $tag->get_option( 'step', 'int', true );
$atts['maxlength'] = $tag->get_maxlength_option();
$atts['minlength'] = $tag->get_minlength_option();
而 wpcf7_number_validation_filter 函数以:
结尾
if ( $tag->is_required() && '' == $value ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_required' ) );
} elseif ( '' != $value && ! wpcf7_is_number( $value ) ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_number' ) );
} elseif ( '' != $value && '' != $min && (float) $value < (float) $min ) {
$result->invalidate( $tag, wpcf7_get_message( 'number_too_small' ) );
} elseif ( '' != $value && '' != $max && (float) $max < (float) $value ) {
$result->invalidate( $tag, wpcf7_get_message( 'number_too_large' ) );
} elseif ( $maxlength && $maxlength < $code_units ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_too_long' ) );
} elseif ( $minlength && $code_units < $minlength ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_too_short' ) );
}
return $result;