2016-05-03 29 views
0

Gravity Formsプラグインのカスタム検証フックを作成しようとしています。少なくとも1つの入力フィールドを検証する、重力フォーム

少なくとも1つのフィールドが一連のフィールドから入力されているかどうかを確認します。

以下のコードを確認してみてください。私はあまりにも機能しません。私は、フィールドが埋められていても、各フィールドにエラーが表示されているにもかかわらず、入力の変数と関係があると思いますか?

add_filter('gform_field_validation_2', function ($result, $value, $form, $field) { 

    if ($field->type == 'number') { 

     $a = rgar($value, $field->id . '10'); 
     $b = rgar($value, $field->id . '12'); 
     $c = rgar($value, $field->id . '13'); 
     $d = rgar($value, $field->id . '14'); 
     $e = rgar($value, $field->id . '15'); 
     $f = rgar($value, $field->id . '17'); 
     $g = rgar($value, $field->id . '18'); 
     $h = rgar($value, $field->id . '20'); 
     $i = rgar($value, $field->id . '21'); 
     $j = rgar($value, $field->id . '22'); 
     $k = rgar($value, $field->id . '23'); 


     if (!empty($a) || !empty($b) || !empty($c) || !empty($d) || !empty($e) || !empty($f) || !empty($g) || !empty($h) || !empty($i) || !empty($j) || !empty($k)) { 
      $result['is_valid'] = true; 
      $result['message'] =''; 
     } else { 
      $result['is_valid'] = false; 
      $result['message'] = 'Please select a quantity of materials to order'; 
     } 

    } 

    return $result; 
}, 10, 4); 
+0

どのタイプのフィールドを検証しようとしていますか? –

+0

番号フィールド – damianchapsmith

答えて

0

だから、HERESに作業バージョン(gform_validationヒントフランシスコRのためのおかげで) - わずかに異なるルートを下って行きますが、将来的に興味のある人包み、完璧に動作します!

add_filter('gform_validation_2', 'custom_validation_2'); 
function custom_validation_2($validation_result) { 

    // array of field IDs to be checked 
    $field_ids = array (10, 12, 13, 14, 15, 17, 18, 20, 21, 23, 22); 

    // get the form object from the validation result 
    $form = $validation_result['form']; 

    // counter to store how many fields have a value > 0 submitted 
    $number_of_fields = 0; 

    // loop through all the fields to be sure one has a value > 0 
    foreach ($field_ids as $input) { 
     // the rgpost string we are going to check 
     $input_id = 'input_' . intval($input); 

     // the value that was submitted 
     $input_value = rgpost ($input_id); 

     if ($input_value > 0) { 
      // if any field in the array has a value, we can just continue 
      $number_of_fields++; 
     } // end if 
     else { 
      // no value for this input, so continue without incrementing the counter 
      continue; 
     } // end else 

    } // end foreach 

    // check the $number_of_fields and if it is 0 return a validation error 
    if ($number_of_fields == 0){ 

     // set the form validation to false 
     $validation_result['is_valid'] = false; 

     // mark all the fields with a validation error 
     foreach($form['fields'] as &$field) { 

      // add a validation error to *all* the inputs if none were submitted > 0 
      if (in_array($field->id, $field_ids)) { 
       $field->failed_validation = true; 
       $field->validation_message = 'Please select a quantity of materials to order from one or all of these fields.'; 
      } // end if 
     } // end foreach 

    } // end if 

    // assign modified $form object back to the validation result 
    $validation_result['form'] = $form; 
    return $validation_result; 

} 
0

それはあなたがあなたのif節を変更してくださいになります。少なくとも一つのオプションが選択されているかどうかを検証するために

if (empty($a) || empty($b) || empty($c) || empty($d) || empty($e) || empty($f) || empty($g) || empty($h) || empty($i) || empty($j) || empty($k)) { 

スキップするには対象とならないフィールドは、複雑な上記の場合の前に次のコードを追加します。

$target_fields = array('name_1', 'name_2'); 
if (!in_array($field, $target_fields)) { 
    $result['is_valid'] = true; 
    $result['message'] = ''; 
} 
+0

それはすべてが値を持っていることを確認するので、それは偽を証明しませんか? また、私はまだ最初の問題をすべてのフィールドに影響を与えるエラーを取得しています – damianchapsmith

0

私はあなたが多分タイプ「ラジオボタン」のフィールドを使うべきだと思います。

フォームに複数の「番号」フィールドがあり、少なくとも1つが満たされていることを検証する必要がある場合は、gform_validationフィルタを使用する必要があります。フィールド。

ヒント:カスタムcssクラスをグループの各フィールドに追加して、それらを識別します。たとえば「validate-quantity」と入力します。

add_filter('gform_validation_2', 'quantity_validation', 1, 4); 
function quantity_validation($validation_result) { 
    if ($validation_result['is_valid']) { 
     $valid=false; 
     $form = $validation_result['form']; 
     foreach($form['fields'] as &$field) { 
      if (strpos($field->cssClass, 'validate-quantity') === false) { 
       continue; 
      } 
      $field_value = rgpost("input_{$field['id']}"); 
      if (!empty($field_value)) { 
       $valid=true; 
       break; 
      } 
     } 

     if (!$valid) { 
      $field["failed_validation"] = true; 
      $field["validation_message"] = 'Please select a quantity of materials to order'; 
      $validation_result['form'] = $form; 
     } 

    } 
    return $validation_result; 
} 
関連する問題