我试图在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);
}
}