Я пытаюсь сжать до 5 файлов и сохранить их в архив для каждого поста. Когда у меня, например, есть 3 файла и я добавляю другой файл, zip-файл будет включать 3 файла после того, как я нажму на обновление. Когда я снова нажму на обновление, в моем zip-файле будет 4 файла.
Я не могу понять, как получить его с первого клика.
Я предполагаю, что поля acf обновляются последними при обновлении, и поэтому я получаю старые значения вместо новых.
Поскольку я удаляю полный zip-файл, а затем воссоздаю его, это означает, что функция создает точно такой же zip-файл, как и раньше, даже если он должен был быть изменен.
Итак, я попытался использовать различные хуки: save_post, save_post_post, acf / save_post и publish_post. Я получил те же результаты, несмотря ни на что.
Я также пробовал разные приоритеты для каждого, 0,1, 999 и 99999. Все те же результаты.
Я также пытался получить значения полей с помощью $ _POST ['acf'] и get_fields.
С $ _POST ['acf'] ничего не работает, я даже не могу удалить файл zip при использовании переменной post.
Я просмотрел все данные, которые мне нужны для процесса архивации и удаления, и это то же самое, что и мое другое решение.
В следующем коде я прокомментировал фрагменты кода, которые не работают вообще, и заменил их фрагментами кода, которые работают, но создают только тот zip-файл, который я хочу, когда нажимаю на обновление во второй раз.
Я также пытался добавить ловушку перед началом функции и после функции. Кажется, не имеет никакого эффекта.
Я знаю, что удаление полного zip-файла и его повторное создание не является лучшей практикой, у меня также был хороший фрагмент кода, который удалял бы только файлы, которые там больше не были, но я не знаю, сколько файлов потребуется, поэтому может быть, для каждого сообщения должна быть специальная группа полей с 20 файлами для загрузки или 2 файлами, и я подумал, что когда я удаляю все сначала, это не имеет значения.
add_action ('acf / save_post', 'archive_upload', 10, 3);
функция archive_upload ($ post_ID) {
$destination = 'wp-content/uploads/archiv/'. hash('md5', $post_ID).'.zip';
$zip = new ZipArchive();
$zip->open( $destination, ZipArchive::CREATE );
$fields = get_fields($post_ID);
//$fields = $_POST['acf'];
if($fields != ''){
$fieldslength = count($fields);
$i = 0;
while( $i < $fieldslength )
{
$zip->deleteIndex($i);
$i++;
}
$zip->close();
$zip = new ZipArchive();
$zip->open( $destination, ZipArchive::CREATE );
if( count( $fields ) ) {
$i = 0;
foreach( $fields as $field ) {
$info .= " ".$field;
/*if($field){
$key = key($fields);
$upload = get_field($key);
$new_filename = $upload['filename'];
$url = get_attached_file($upload['id']);
$info .= " ".$key." ".$url." ".$new_filename;
$zip->addFile( $url, $new_filename );
$i++;
}
next($fields);*/
$new_filename = $field['filename'];
$url = get_attached_file($field['id']);
$info .= " ".$url." ".$new_filename;
$zip->addFile( $url, $new_filename );
}
}
//die($info);
}
}
$zip->close();
}
/*function custom_hook() {
do_action('custom_hook');
}
add_action('custom_hook', 'archive_upload');*/