문의폼7 - 커스텀 검증
소문자 ASCII 문자와 숫자만 사용하려면 하나의 필드('인스턴스'라고 함)만 검증해야 합니다. 첫 번째 문자는 숫자가 아닌 문자여야 합니다.대문자는 사용할 수 있지만 입력할 때는 소문자로 입력해야 합니다.따라서 누군가가 맥도날드라는 인스턴스 이름을 사용하는 경우 맥도날드(CSS뿐만 아니라)로 소문자가 지정됩니다.공백도 사용할 수 없습니다.
CF7에서도 가능합니까?그렇다면 방법을 설명해 주세요.
이 커스텀 검증 방법은 이미 시도해 보았습니다만, 파일에 프리셋의 커스텀 검증을 실시해도, 필드 자체가 아니고, 필드 쇼트 코드만을 표시하고 있었습니다.
감사해요.
contactform7.com에서 Custom Validation → Validation as a Filter(필터로서의 검증)를 참조해 주세요.
Contact Form 7 에서는, 필터 기능으로서 유저 입력의 검증이 실장됩니다.검증에 사용되는 필터 후크는 폼 태그 유형에 따라 다르며 wpcf7_validate_ + {type of form-tag}로 결정됩니다.따라서 텍스트 폼태그에는 필터 후크 wpcf7_validate_text 가 사용됩니다.마찬가지로 wpcf7_validate_email*도 이메일* 폼태그에 사용됩니다.
다음과 같은 전자 메일 필드가 폼에 있다고 가정합니다.
Email: [email* your-email] Confirm email: [email* your-email-confirm]
다음 목록에는 두 필드의 값이 동일한지 여부를 확인하는 코드가 나와 있습니다.
add_filter('wpcf7_validate_email*', 'custom_email_confirmation_validation_filter', 20, 2); function custom_email_confirmation_validation_filter($result, $tag) { $tag = new WPCF7_FormTag($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
.$result
의 예다.WPCF7_Validation
일련의 검증 프로세스를 관리하는 클래스입니다.$tag
는 지정된 폼태그 컴포넌트로 구성된 어소시에이션 배열입니다.앞의 레시피에서 보셨듯이 를 사용할 수 있습니다.WPCF7_FormTag
이 유형의 데이터를 처리하는 클래스입니다.필터 기능 내부를 살펴봅니다.먼저 폼태그의 이름을 체크하고 검증이 특정 필드에만 적용되는지 확인합니다( ).
your-email-confirm
).그런 다음 두 전자 메일 필드 값을 비교하고 일치하지 않으면
$result->invalidate()
호출됩니다.2개의 파라미터를 전달해야 합니다.invalidate()
method: 첫 번째 파라미터는 다음과 같습니다.$tag
두 번째 파라미터는 필드에 표시하는 검증 오류 메시지입니다.마지막으로, 잊지 말고 반품해 주세요.
$result
.
// 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
이름 필드의 유효성에 대해서도 같은 문제가 있었습니다.다음 코드를 함수에 추가했습니다.php, regex를 변경하여 커스터마이즈 할 수 있습니다.
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' )
)
));
}
이 워드프레스 플러그인을 사용하십시오.
연락처 폼7의 Jquery 검증 https://wordpress.org/plugins/jquery-validation-for-contact-form-7/
인 커스텀 할 수 .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;
}
the the the를 하는 이 요령이었다.$result
변수입니다. 이 매개 변수는 객체에 대한 매개 변수입니다.invalidate
에러 메시지를 추가하는 방법이 캐스팅 전에 작동하지 않았습니다.
이 플러그인을 사용해 보세요.무료 버전에서는 필드별로 커스텀 확인 메시지를 설정할 수 있습니다.URL : https://wordpress.org/plugins/cf7-custom-validation-message/
언급URL : https://stackoverflow.com/questions/22858288/contact-form-7-custom-validation
'programing' 카테고리의 다른 글
WooCommerce - URL에서 제품 및 제품 카테고리를 삭제하는 방법 (0) | 2023.03.01 |
---|---|
React를 통한 빅리스트 퍼포먼스 (0) | 2023.03.01 |
componentDidUpdate() 내의 setState() (0) | 2023.03.01 |
Reactjs "Error: ENOENT: 그런 파일이나 디렉토리가 없습니다.열어주세요.jsx 파일을 tsx로 변환한 후 (0) | 2023.03.01 |
Mongoose 컬렉션에서 특정 필드를 제외하려면 어떻게 해야 합니까? (0) | 2023.03.01 |