Пользовательская проверка контактной формы7 - PullRequest
0 голосов
/ 06 апреля 2020

Мне нужна проверка формы - если кто-то вводит номер телефона / электронную почту, тогда никакой электронный адрес / номер телефона больше не требуется. Я пытался

(function($) {
    $(document).ready(function(){
        $(".wpcf7-email").on('change', function postinput(){
            var id = $(this).val();
            if(id) {
                   document.getElementById('phone').setAttribute("aria-required", "false");
                   $( "#phone" ).removeClass( "wpcf7-validates-as-required" )
           } else {
                   document.getElementById('phone').setAttribute("aria-required", "true");
           }
        });
    }); 
})(jQuery);

И пытался PHP

    add_filter( 'wpcf7_validate_text', 'xyz_validation', 20, 2 );

    function xyz_validation( $result, $tag ) {

        $email = isset( $_POST['email'] ) ? trim( $_POST['email'] ) : '';
        $phone = isset( $_POST['phone'] ) ? trim( $_POST['phone'] ) : '';

        if ( !empty($email) && !empty($subject) ) {
          $result->invalidate( $tag, "Really?" );
        }

Моя контактная форма (jquery - в PHP форма не требуется (без знака '*')

[email* email id:email]
[number* phone id:phone]

1 Ответ

0 голосов
/ 24 апреля 2020

Одним из способов достижения этого, без использования javascript, является использование расширения Smart Grid-layout для CF7 , оно было разработано для компенсации многих недостатков плагина CF7. Он вводит пользовательский хук проверки, который позволяет проверять отправления в свете всего отправленного набора данных,

add_filter( 'cf7sg_validate_submission','validate_field_submission',10,3);
function validate_field_submission($validation_errors, $submission, $cf7_key){
  if('my-contact-form'==$cf7_key ){ //check this is the right form.
    //$validation_errors is an array of field-names=>error messages.
    //these include the simple validation exposed in the CF7 plugin for required fields/special field formats.
    if(!empty($submission['phone']) && wpcf7_get_message( 'invalid_required' ) == $validation_errors['email']){
      //reset the error message.
      $validation_errors['email'] = '';
    }
    if(!empty($submission['email']) && wpcf7_get_message( 'invalid_required' ) == $validation_errors['phone']){
      //reset the error message.
      $validation_errors['phone'] = '';
    }
  return $validation_errors;
  }    
}
...