acf_validate_attachment() │ ACF 5.2.3
acf_validate_attachment
This function will validate an attachment based on a field's restrictions and return an array of errors
Хуки из функции
Возвращает
$errors. (array)
Использование
acf_validate_attachment( $attachment, $field, $context );
- $attachment(обязательный)
- .
- $field(обязательный)
- .
- $context
- .
По умолчанию:'prepare'
Список изменений
| С версии 5.2.3 | Введена. |
Код acf_validate_attachment() acf validate attachment ACF 6.4.2
function acf_validate_attachment( $attachment, $field, $context = 'prepare' ) {
// vars
$errors = array();
$file = array(
'type' => '',
'width' => 0,
'height' => 0,
'size' => 0,
);
// upload
if ( $context == 'upload' ) {
// vars
$file['type'] = pathinfo( $attachment['name'], PATHINFO_EXTENSION );
$file['size'] = filesize( $attachment['tmp_name'] );
if ( strpos( $attachment['type'], 'image' ) !== false ) {
$size = getimagesize( $attachment['tmp_name'] );
$file['width'] = acf_maybe_get( $size, 0 );
$file['height'] = acf_maybe_get( $size, 1 );
}
// prepare
} elseif ( $context == 'prepare' ) {
$use_path = isset( $attachment['filename'] ) ? $attachment['filename'] : $attachment['url'];
$file['type'] = pathinfo( $use_path, PATHINFO_EXTENSION );
$file['size'] = acf_maybe_get( $attachment, 'filesizeInBytes', 0 );
$file['width'] = acf_maybe_get( $attachment, 'width', 0 );
$file['height'] = acf_maybe_get( $attachment, 'height', 0 );
// custom
} else {
$file = array_merge( $file, $attachment );
$use_path = isset( $attachment['filename'] ) ? $attachment['filename'] : $attachment['url'];
$file['type'] = pathinfo( $use_path, PATHINFO_EXTENSION );
}
// image
if ( $file['width'] || $file['height'] ) {
// width
$min_width = (int) acf_maybe_get( $field, 'min_width', 0 );
$max_width = (int) acf_maybe_get( $field, 'max_width', 0 );
if ( $file['width'] ) {
if ( $min_width && $file['width'] < $min_width ) {
// min width
$errors['min_width'] = sprintf( __( 'Image width must be at least %dpx.', 'acf' ), $min_width );
} elseif ( $max_width && $file['width'] > $max_width ) {
// min width
$errors['max_width'] = sprintf( __( 'Image width must not exceed %dpx.', 'acf' ), $max_width );
}
}
// height
$min_height = (int) acf_maybe_get( $field, 'min_height', 0 );
$max_height = (int) acf_maybe_get( $field, 'max_height', 0 );
if ( $file['height'] ) {
if ( $min_height && $file['height'] < $min_height ) {
// min height
$errors['min_height'] = sprintf( __( 'Image height must be at least %dpx.', 'acf' ), $min_height );
} elseif ( $max_height && $file['height'] > $max_height ) {
// min height
$errors['max_height'] = sprintf( __( 'Image height must not exceed %dpx.', 'acf' ), $max_height );
}
}
}
// file size
if ( $file['size'] ) {
$min_size = acf_maybe_get( $field, 'min_size', 0 );
$max_size = acf_maybe_get( $field, 'max_size', 0 );
if ( $min_size && $file['size'] < acf_get_filesize( $min_size ) ) {
// min width
$errors['min_size'] = sprintf( __( 'File size must be at least %s.', 'acf' ), acf_format_filesize( $min_size ) );
} elseif ( $max_size && $file['size'] > acf_get_filesize( $max_size ) ) {
// min width
$errors['max_size'] = sprintf( __( 'File size must not exceed %s.', 'acf' ), acf_format_filesize( $max_size ) );
}
}
// file type
if ( $file['type'] ) {
$mime_types = acf_maybe_get( $field, 'mime_types', '' );
// lower case
$file['type'] = strtolower( $file['type'] );
$mime_types = strtolower( $mime_types );
// explode
$mime_types = str_replace( array( ' ', '.' ), '', $mime_types );
$mime_types = explode( ',', $mime_types ); // split pieces
$mime_types = array_filter( $mime_types ); // remove empty pieces
if ( ! empty( $mime_types ) && ! in_array( $file['type'], $mime_types ) ) {
// glue together last 2 types
if ( count( $mime_types ) > 1 ) {
$last1 = array_pop( $mime_types );
$last2 = array_pop( $mime_types );
$mime_types[] = $last2 . ' ' . __( 'or', 'acf' ) . ' ' . $last1;
}
$errors['mime_types'] = sprintf( __( 'File type must be %s.', 'acf' ), implode( ', ', $mime_types ) );
}
}
/**
* Filters the errors for a file before it is uploaded or displayed in the media modal.
*
* @since 5.2.3
*
* @param array $errors An array of errors.
* @param array $file An array of data for a single file.
* @param array $attachment An array of attachment data which differs based on the context.
* @param array $field The field array.
* @param string $context The curent context (uploading, preparing)
*/
$errors = apply_filters( "acf/validate_attachment/type={$field['type']}", $errors, $file, $attachment, $field, $context );
$errors = apply_filters( "acf/validate_attachment/name={$field['_name']}", $errors, $file, $attachment, $field, $context );
$errors = apply_filters( "acf/validate_attachment/key={$field['key']}", $errors, $file, $attachment, $field, $context );
$errors = apply_filters( 'acf/validate_attachment', $errors, $file, $attachment, $field, $context );
// return
return $errors;
}