Чтение и обновление настраиваемого поля в хуке woocommerce_product_on_backorder

У меня есть настраиваемое поле в вариациях продуктов 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, это просто число. Что я пытаюсь сделать, так это уменьшить это число на основе количества невыполненных заказов по этому заказу.

Однако, даже если регулярный запас продукта обновляется, мое пользовательское поле остается прежним.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С этот крючок$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 вашей активной дочерней темы (или активной темы). Он должен работать.

Потрясающий. Теперь он запущен! Однако у меня есть другая проблема. Если на моем складе 5 товаров, и я закажу 6, я ожидаю, что только 1 будет удален из второго пользовательского поля запаса. Однако описанное выше действие удаляет все 6 из них. Любое обходное решение?

Tasos 07.04.2019 13:12

@Tasos Извините, мой ответ здесь просто делает ваше пользовательское поле разрешенным для чтения и обновления в подключенной функции. Для этой другой проблемы вы должны задать новый вопрос, пожалуйста.

LoicTheAztec 07.04.2019 13:16

Другие вопросы по теме