将产品保存在后端后,更新Woo产品的ACF字段

时间:2018-10-07 19:04:33

标签: php wordpress woocommerce advanced-custom-fields hook-woocommerce

我试图在woocommerce中从产品的变量中获取一个字段,并将其值每次创建或编辑时都存储在ACF字段中。

我正在使用钩子woocommerce_update_product和ACF函数update_field()来尝试获取该值并将其存储。它似乎正在工作,但是,在挂钩将其重新写回原始值之后,会运行某些内容。

该产品是数字下载,但是数字下载的价格需要根据所选的变化而变化。使用也是Woo中可变产品的数字下载时,您必须为每个变体附加数字下载,即使它们是相同的。这使得在前端查询它们非常慢。我的解决方法是创建一个ACF字段,将第一个版本的下载内容填充到其中,然后仅查询该ACF字段,而不是所有版本和所有版本下载。

如果我死了;在update_field()函数之后,它将正确保存ACF字段,但是如果允许继续进行产品保存,则将覆盖该字段。

我已经尝试过调整钩子的优先级,但这没有什么区别。这就是我的工作。

add_action( 'woocommerce_update_product', 'mp_sync_on_product_save', 20, 1 );

function mp_sync_on_product_save( $product_id ) {

    $product = wc_get_product( $product_id );
    $available_variations = $product->get_available_variations()[0];
    $v_id = $available_variations['variation_id'];

    $downloads = get_post_meta( $v_id, '_downloadable_files', true );

    if ($downloads) {
        $download = reset($downloads);
        $audio = $download['file'];

        update_field('field_5bb6c5a977761', $audio, $product_id);
    }
}

0 个答案:

没有答案