save_post上的ACF字段值未更新

时间:2019-05-17 08:09:16

标签: php wordpress zip advanced-custom-fields ziparchive

我正在尝试压缩最多5个文件,并将其保存在每个帖子的存档中。例如,当我有3个文件并添加另一个文件时,单击更新后,zip文件将包括3个文件。当我再次单击更新时,我的zip文件中将有4个文件。 我真的不知道如何在第一次点击时获得它。

我的猜测是acf字段在更新时最后更新,这就是为什么我得到旧值而不是新值的原因。 因为我删除了完整的zip文件,然后重新创建,这意味着该函数将创建与以前完全相同的zip文件,即使它应该已更改。

所以我尝试使用不同的钩子:save_post,save_post_post,acf / save_post和publish_post。无论如何,我都得到相同的结果。 我还分别对0、1、9、999和99999尝试了不同的优先级。结果仍然相同。

我还尝试使用$ _POST ['acf']和get_fields获取字段值。 使用$ _POST ['acf']无效,使用post变量时,我什至无法删除zip文件。 我查看了压缩和删除过程所需的所有数据,它与我的其他解决方案相同。

在下面的代码中,我注释了根本不起作用的代码段,并用有效但仅在第二次单击“更新”时创建所需的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');*/

0 个答案:

没有答案