Я пытаюсь взять поле из переменной продукта в 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);
}
}