お問い合わせフォーム7に組み込まれている確認方法を使用して電話番号を確認しようとしています。
お問い合わせフォーム7のマークアップ:
<p>[number* your-telephone min:1000000000 max:9999999999 placeholder "Telephone number"] </p>
<p>[submit "submit"]</p>
だから、私がここでやろうとしているのは、番号の入力タイプの最小プロパティと最大プロパティを使用して電話番号を制限することです。しかし、ここでの問題は、電話番号を入力すると、0402356584と言うと、最小値よりも小さいが、それでも電話番号であるということです。
では、可能なすべての10桁の電話番号をサポートするように最小値と最大値を設定するにはどうすればよいですか?
私のアプローチとは異なる他の解決策も大歓迎です。 min属性とmax属性を使用して検証を行うことはできないと感じたためです。
source のコードを使用して、functions.phpファイルを介してプラグインファイルを編集しようとしましたが、機能しませんでした。
したがって、お問い合わせフォーム7で電話番号を検証するための完璧なソリューションをお持ちの方がいらっしゃいましたら、回答を投稿してください。
これを試してみてください フォーム7のドキュメントにお問い合わせください に従って動作します。
[number* your-telephone minlength:10 maxlength:140 placeholder "Telephone number"]
[tel * tel-672]フィールドを使用し、wpcf7_is_telフィルターフックを介して要件に応じて検証できます。
お問い合わせフォーム7には、任意のフィールドを検証できる多くの事前定義されたフックがあります。ここでは、お問い合わせフォーム7のformatting.phpモジュールで検証ルールは、次の方法で定義されます。functions.phpを介してapply_filtersに記載されているフィルターフックでオーバーライドできます。
function wpcf7_is_tel( $tel ) {
$result = preg_match( '/^[+]?[0-9() -]*$/', $tel );
return apply_filters( 'wpcf7_is_tel', $result, $tel );
}
アクティブ化されたテーマフォルダーのfunctions.phpに以下のコードを追加し、検証ルールを$ resultに追加してください
// define the wpcf7_is_tel callback
function custom_filter_wpcf7_is_tel( $result, $tel ) {
$result = preg_match( '/^\(?\+?([0-9]{1,4})?\)?[-\. ]?(\d{10})$/', $tel );
return $result;
}
add_filter( 'wpcf7_is_tel', 'custom_filter_wpcf7_is_tel', 10, 2 );
あなたが見ることができます もっと
function custom_phone_validation($ result、$ tag){ $ type = $ tag ['type']; $ name = $ tag ['name' ]; if($ name == 'phonenumber'){ $ phoneNumber = isset($ _POST ['phonenumber'])? trim($ _POST ['phonenumber']): ''; $ the_value = preg_match( "/ your_reg_exp format for phone number /"、$ _ POST [$ name]); if($ phoneNumber == "" || $ the_value == false){ $ result-> invalidate($ tag、 "有効な電話番号を入力してください"); } } return $ result; } add_filter( 'wpcf7_validate_tel'、 'custom_phone_validation'、10、2); add_filter( 'wpcf7_validate_tel *'、 'custom_phone_validation'、 10、2);
電話番号->フィールド名
function.phpファイルにこれを試してください。
フィルタ: https://plugins.trac.wordpress.org/browser/contact-form-7/trunk/modules/text.php _wpcf7_validate_tel
_これは関数wpcf7_validate_tel( $result, $tag )
これは、telタイプのフィールドで機能します。数値フィールドまたはテキストフィールドを使用する場合は、コードだけでなく、フィルターパラメーターの「wpcf7_validate_tel」を変更する必要があります。
function custom_phone_validation($result,$tag){
$type = $tag->type;
$name = $tag->name;
if($type == 'tel' || $type == 'tel*'){
$phoneNumber = isset( $_POST[$name] ) ? trim( $_POST[$name] ) : '';
$phoneNumber = preg_replace('/[() .+-]/', '', $phoneNumber);
if (strlen((string)$phoneNumber) != 10) {
$result->invalidate( $tag, 'Please enter a valid phone number.' );
}
}
return $result;
}
add_filter('wpcf7_validate_tel','custom_phone_validation', 10, 2);
add_filter('wpcf7_validate_tel*', 'custom_phone_validation', 10, 2);
私は素晴らしい回避策があると思います...
デフォルトでは、数値フィールドには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;
私の場合、以下のコードが機能しています。重要な点は、入力タイプは以下のように「tel」である必要があるということです。
[tel your-telephone minlength:1 maxlength:10]
これを試して:
[tel your-phone minlength:10 maxlength:140]
幸運を!!
ちゅちゃ!