Разархивирование загруженного архива ACF PRO

В одном из проектов, была задача загружать в запись архив с изображениями, которые затем обрабатывались.

  • eye 91
  • 1

Для удобства администрирования использовался плагин ACF PRO. Поэтому в запись выводилось поле типа «Файл» для загрузки архива в запись.

Дальше архив должен был загрузиться в определенную папку и быть распакован. Фрагмент кода, который реализует именно эту часть задачи:


/*
* Adding special uploads folder for VR files
*/

add_filter( 'acf/upload_prefilter/name=product_model', 'product_model_prefilter' );
add_filter( 'acf/prepare_field/name=product_model', 'product_model_field_display' );

function product_model_prefilter( $errors ) {

add_filter( 'upload_dir', 'product_model_directory' );

return $errors;

}

function product_model_directory( $uploads ) {

$folder = '/model-files';

$uploads['path'] = $uploads['basedir'] . $folder;
$uploads['url'] = $uploads['baseurl'] . $folder;
$uploads['subdir'] = '/';

return $uploads;

}

function product_model_field_display( $field ) {

// update paths accordingly before displaying link to file
add_filter( 'upload_dir', 'product_model_directory' );

return $field;

}

/*
* @file – path to zip file
* @target – destination directory for unzipped files
*/
function unzip_vr_file(){

$file = get_field('product_model');
$attachment_id = $file['id'];
$path_to_file_array = pathinfo( get_attached_file( $attachment_id ) );
$path_to_dir = $path_to_file_array["dirname"];
$path_to_file_string = $path_to_file_array["dirname"] . '/' . $path_to_file_array["basename"];
$target = pathinfo( get_attached_file( $attachment_id ) );

// Creating new ZipArchive object
$zip = new ZipArchive();

// Opening the file
$open = $zip->open($path_to_file_string);

//Checking if file has been opened properly
if($open === true) {

// Extracting the zip file
$zip->extractTo($path_to_dir);

//Closing the zip file
$zip->close();

// Deleting the zip file
// unlink($path_to_file_string);

return true;
}
else {
return false;
}

}

add_filter('acf/save_post', 'unzip_vr_file', 10);

Обращаю внимание, что это фрагмент кода. Используйте всё вдумчиво!

comments powered by HyperComments

Поделиться

На вашу почту будет отправлена одноразовая ссылка на портфолио

Отправлено!

Что-то пошло не так... Попробуйте отправить позже