У меня есть настраиваемое поле в вариациях продуктов Woocommerce, и я пытаюсь обновить это поле везде, где есть отложенный заказ. это код
add_action( 'woocommerce_product_on_backorder', 'reduce_second_stock' );
function reduce_second_stock( $array ){
$temp = get_post_meta($array['product']->ID, 'second_stock', true);
update_post_meta( $array['product']->ID, 'second_stock', $temp - $array['quantity'] );
}
Пользовательское поле называется second_stock
, это просто число. Что я пытаюсь сделать, так это уменьшить это число на основе количества невыполненных заказов по этому заказу.
Однако, даже если регулярный запас продукта обновляется, мое пользовательское поле остается прежним.
С этот крючок$array['product']
является WC_Product
объектом, поэтому для получения идентификатора продукта вам нужно использовать соответствующий метод get_id()
… Начиная с WooCommerce 3 и CRUD-объекты, вы можете напрямую использовать WC_Data
методы get_meta()
, update_meta_data()
и save()
для объекта WC_Product
, например:
add_action( 'woocommerce_product_on_backorder', 'reduce_second_stock' );
function reduce_second_stock( $array ){
if ( $original_stock = $array['product']->get_meta('second_stock') ) {
$array['product']->update_meta_data( 'second_stock', ( $original_stock - $array['quantity'] ) );
$array['product']->save();
}
}
Код находится в файле function.php вашей активной дочерней темы (или активной темы). Он должен работать.
@Tasos Извините, мой ответ здесь просто делает ваше пользовательское поле разрешенным для чтения и обновления в подключенной функции. Для этой другой проблемы вы должны задать новый вопрос, пожалуйста.
Потрясающий. Теперь он запущен! Однако у меня есть другая проблема. Если на моем складе 5 товаров, и я закажу 6, я ожидаю, что только 1 будет удален из второго пользовательского поля запаса. Однако описанное выше действие удаляет все 6 из них. Любое обходное решение?