Значения полей ACF на save_post не обновляются - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь сжать до 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');*/
...