Support

Account

Home Forums Add-ons Repeater Field Avoid duplicate content on repeater field Reply To: Avoid duplicate content on repeater field

  • Hello,

    I have added the below code to avoid the duplicated content, but this is not working to me could you help me to resolve the issue?

    function unique_repeater_sub_field($valid, $value, $field, $input) {
      if (!$valid) {
        return $valid;
      }
      
      // get list of array indexes from $input
      // [ <= this fixes my IDE, it has problems with unmatched brackets
      preg_match_all('/\[([^\]]+)\]/', $input, $matches);
      if (!count($matches[1])) {
        // this should actually never happen
        return $valid;
      }  
      $matches = $matches[1];
      
      // walk the acf input to find the repeater and cur  rent row      
      $array = $_POST['acf'];
      
      $repeater_key = false;
      $repeater_value = false;
      $row_key = false;
      $row_value = false;   
      $field_key = false;
      $field_value = false;
      
      for ($i=0; $i<count($matches); $i++) {
        if (isset($array[$matches[$i]])) {
          $repeater_key = $row_key;
          $repeater_value = $row_value;
          $row_key = $field_key;
          $row_value = $field_value;
          $field_key = $matches[$i];
          $field_value = $array[$matches[$i]];   
          if ($field_key == $field['field_5731ff201fa2e']) {
            break;
          }
          $array = $array[$matches[$i]];
        }   
      }
      
      if (!$repeater_key) {
        // this should not happen, but better safe than sorry
        return $valid;
      }
      
      // look for duplicate values in the repeater
      foreach ($repeater_value as $index => $row) {
        if ($index != $row_key && $row[$field_key] == $value) {
          // this is a different row with the same value
          $valid = 'this value is not unique';
          break;
        }
      }
            
      return $valid;
    }
         
    
    add_filter('acf/validate_value/key='.$field_key, 'unique_repeater_sub_field', 20, 4);

    Repeated