You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从自定义字段同步WooCommerce可下载文件遇更新延迟问题

解决WooCommerce + ACF Post Object字段自动填充下载文件延迟生效的问题

我懂你遇到的这个头疼问题——修改ACF的Post Object字段后,第一次保存产品时可下载文件根本没更新,得再点一次保存才生效。这本质是钩子触发时机的冲突,咱们来把它理顺:

问题根源

你当前用的woocommerce_admin_process_product_object钩子,执行时机早于ACF保存字段值的时机。第一次保存产品时,ACF还没把新选的专辑ID写入数据库,get_field()拿到的还是旧数据,自然不会更新下载文件;第二次保存时,ACF已经完成了字段更新,这时候才能拿到新值生效。

修复方案:换用ACF专属钩子

我们改用ACF的acf/save_post钩子,把优先级设为20(高于ACF默认的10),确保ACF先保存好新的字段值,再执行下载文件的同步逻辑。修改后的代码如下:

add_action( 'acf/save_post', 'mysite_sync_product_downloads_from_albums', 20 );
function mysite_sync_product_downloads_from_albums( $post_id ) {
    // 只处理WooCommerce产品类型,跳过其他文章
    if ( ! wc_get_product( $post_id ) ) {
        return;
    }

    // 获取ACF更新后的最新专辑数据
    $selected_albums = get_field( 'mysite_select_albums', $post_id );
    $downloads = array();

    if ( $selected_albums ) {
        foreach ( $selected_albums as $album ) {
            // 跳过无效的文章ID,避免报错
            $album_post = get_post( $album );
            if ( ! $album_post ) {
                continue;
            }

            $file_title = $album_post->post_title;
            // 这里可以替换成专辑对应的实际文件URL,比如从专辑的ACF字段获取
            $file_url = "http://changingthinstosimplify.com/";
            $file_md5 = md5( $file_url );

            $download = new WC_Product_Download();
            $download->set_name( $file_title );
            $download->set_id( $file_md5 );
            $download->set_file( $file_url );

            $downloads[ $file_md5 ] = $download;
        }
    }

    // 同步下载文件到产品并保存
    $product = wc_get_product( $post_id );
    $product->set_downloads( $downloads );
    $product->save();
}

额外注意事项

  • 记得删除原来的woocommerce_admin_process_product_object钩子代码,避免重复执行逻辑。
  • 如果你的专辑文件URL是存在专辑的ACF字段里的,把$file_url改成类似get_field( '你的专辑文件字段名', $album )的形式,替换成你实际的字段键。
  • 测试时修改Post Object字段后直接保存,下载文件应该就能即时更新了。

内容的提问来源于stack exchange,提问作者Tim Green

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:07:33