acf_field_repeater::validate_value()publicACF 5.0.0

Validates values for the repeater field

Метод класса: acf_field_repeater{}

Хуков нет.

Возвращает

true|false.

Использование

$acf_field_repeater = new acf_field_repeater();
$acf_field_repeater->validate_value( $valid, $value, $field, $input );
$valid(true|false) (обязательный)
If the field is valid.
$value(разное) (обязательный)
The value to validate.
$field(массив) (обязательный)
The main field array.
$input(строка) (обязательный)
The input element's name attribute.

Список изменений

С версии 5.0.0 Введена.

Код acf_field_repeater::validate_value() ACF 6.0.4

function validate_value( $valid, $value, $field, $input ) {
	// vars
	$count = 0;

	// check if is value (may be empty string)
	if ( is_array( $value ) ) {

		// remove acfcloneindex
		if ( isset( $value['acfcloneindex'] ) ) {
			unset( $value['acfcloneindex'] );
		}

		// count
		$count = count( $value );
	}

	// validate required
	if ( $field['required'] && ! $count ) {
		$valid = false;
	}

	// min
	$min = (int) $field['min'];
	if ( empty( $field['pagination'] ) && $min && $count < $min ) {

		// create error
		$error = __( 'Minimum rows reached ({min} rows)', 'acf' );
		$error = str_replace( '{min}', $min, $error );

		// return
		return $error;
	}

	// validate value
	if ( $count ) {

		// bail early if no sub fields
		if ( ! $field['sub_fields'] ) {
			return $valid;
		}

		// loop rows
		foreach ( $value as $i => $row ) {

			// Skip rows that were deleted in paginated repeaters.
			if ( false !== strpos( $i, '_deleted' ) ) {
				continue;
			}

			// loop sub fields
			foreach ( $field['sub_fields'] as $sub_field ) {

				// vars
				$k = $sub_field['key'];

				// test sub field exists
				if ( ! isset( $row[ $k ] ) ) {
					continue;
				}

				// validate
				acf_validate_value( $row[ $k ], $sub_field, "{$input}[{$i}][{$k}]" );
			}
			// end loop sub fields
		}
		// end loop rows
	}

	return $valid;
}