小文字ASCII文字と数字のみを受け入れるには、1つのフィールド(「インスタンス」と呼ばれる)のみを検証する必要があります。最初の文字も数字ではなく文字である必要があります。大文字を受け入れますが、入力時に小文字にするために必要になります。したがって、誰かがインスタンス名McDonaldsを使用すると、(CSSだけでなく)mcdonaldsに小文字になります。スペースも許可されません。
これはCF7で可能ですか?もしそうなら、その方法を説明してください。
私はすでに this カスタム検証方法を試しましたが、ファイルに事前設定されたカスタム検証があっても、フィールド自体ではなく、フィールドのショートコードを表示するだけでした。
ありがとう
From contactform7.com onCustom Validation→Validationas a Filter:
Contact Form 7では、ユーザー入力の検証がフィルター機能として実装されています。検証に使用されるフィルターフックは、フォームタグのタイプによって異なり、wpcf7_validate_ + {フォームタグのタイプ}として決定されます。したがって、テキストフォームタグの場合、フィルターフックwpcf7_validate_textが使用されます。同様に、wpcf7_validate_email *はemail *フォームタグに使用されます。
フォームに次のメールフィールドがあるとします。
Email: [email* your-email] Confirm email: [email* your-email-confirm]
次のリストは、2つのフィールドの値が同じであるかどうかを確認するコードを示しています。
add_filter('wpcf7_validate_email*', 'custom_email_confirmation_validation_filter', 20, 2); function custom_email_confirmation_validation_filter($result, $tag) { $tag = new WPCF7_Shortcode($tag); if ('your-email-confirm' == $tag->name) { $your_email = isset($_POST['your-email']) ? trim($_POST['your-email']) : ''; $your_email_confirm = isset($_POST['your-email-confirm']) ? trim($_POST['your-email-confirm']) : ''; if ($your_email != $your_email_confirm) { $result->invalidate($tag, "Are you sure this is the correct address?"); } } return $result; }
$ resultと$ tagの2つのパラメーターがフィルター関数に渡されます。 $ resultは、一連の検証プロセスを管理するWPCF7_Validationクラスのインスタンスです。 $ tagは、指定されたフォームタグコンポーネントで構成される連想配列です。前のレシピで見たように、WPCF7_Shortcodeクラスを使用してこのタイプのデータを処理できます。
フィルタ機能の内部を確認してください。まず、フォームタグの名前をチェックして、検証が特定のフィールド(your-email-confirm)にのみ適用されることを確認します。
次に、2つのメールフィールドの値が比較され、一致しない場合は、$ result-> invalidate()が呼び出されます。 2つのパラメーターをinvalidate()メソッドに渡す必要があります。最初のパラメーターは$ tag変数である必要があり、2番目のパラメーターはフィールドに表示する検証エラーメッセージです。
最後に、$ resultを返すことを忘れないでください。
add_filter
関数を使用して、フォームフィールド入力に独自のカスタム検証を追加できます。
textarea
フィールドのカスタム検証を追加するには、テーマのルートディレクトリのfunctions.php
ファイル内に次のものを追加できます。
add_filter( 'wpcf7_validate_textarea*', 'custom_textarea_validation_filter', 1, 2 );
function custom_textarea_validation_filter( $result, $tag ) {
$tag = new WPCF7_Shortcode($tag);
$result = (object)$result;
$name = 'project-synopsis';
if ( $name == $tag->name ) {
$project_synopsis = isset( $_POST[$name] ) ? trim( wp_unslash( (string) $_POST[$name] ) ) : '';
if ( empty( $project_synopsis ) ) {
$result->invalidate( $tag, "Please write a quick project synopsis." );
}
}
return $result;
}
エラーメッセージを追加するために使用されるinvalidate
メソッドはキャストする前に機能しなかったため、私にとってのトリックは$result
パラメーターをオブジェクトにキャストすることでした。
名前フィールドの検証についても同様の問題がありました。functions.phpに次のコードを追加しました。正規表現を変更することでカスタマイズできます。
function my_wpcf7_validate_text( $result, $tag ) {
$type = $tag['type'];
$name = $tag['name'];
$value = $_POST[$name] ;
if ( strpos( $name , 'name' ) !== false ){
$regex = '/^[a-zA-Z]+$/';
$Valid = preg_match($regex, $value, $matches );
if ( $Valid > 0 ) {
} else {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_name' ) );
}
}
return $result;
}
add_filter( 'wpcf7_validate_text*', 'my_wpcf7_validate_text' , 10, 2 );
add_filter( 'wpcf7_messages', 'mywpcf7_text_messages' );
function mywpcf7_text_messages( $messages ) {
return array_merge( $messages, array(
'invalid_name' => array(
'description' => __( "Name is invalid", 'contact-form-7' ),
'default' => __( 'Name seems invalid.', 'contact-form-7' )
)
));
}
これを使用してくださいwordpressプラグイン
お問い合わせフォーム7のJquery検証 https://wordpress.org/plugins/jquery-validation-for-contact-form-7/
// CF7フォームフィールドのカスタム検証を追加します
function is_company_email($email){ // Check against list of common public email providers & return true if the email provided *doesn't* match one of them
if(
preg_match('/@gmail.com/i', $email) ||
preg_match('/@hotmail.com/i', $email) ||
preg_match('/@live.com/i', $email) ||
preg_match('/@msn.com/i', $email) ||
preg_match('/@aol.com/i', $email) ||
preg_match('/@yahoo.com/i', $email) ||
preg_match('/@inbox.com/i', $email) ||
preg_match('/@gmx.com/i', $email) ||
preg_match('/@me.com/i', $email)
){
return false; // It's a publicly available email address
}else{
return true; // It's probably a company email address
}
}
function your_validation_filter_func($result,$tag){
$type = $tag['type'];
$name = $tag['name'];
if('yourid' == $value){ // Only apply to fields with the form field name of "company-email"
$the_value = $_POST[$name];
if(!is_company_email($the_value)){ // Isn't a company email address (it matched the list of free email providers)
$result['valid'] = false;
$result->invalidate( $tag, wpcf7_get_message( 'invalid_email' ));
}
}
return $result;
}
add_filter( 'wpcf7_validate_email', 'your_validation_filter_func', 10, 2 );
// Email field or contact number field
add_filter( 'wpcf7_validate_email*', 'your_validation_filter_func', 10, 2 ); // Req. Email field or contact number