所以.我正在try 用PHP创建一个新订单状态,我需要新的状态来增加按该顺序列出的产品的库存,当我这样做时,它不起作用,永远不会改变任何东西,即使我将它附加到WooCommerce的增加库存挂钩.

我try 了不同的方法:

选项1

function wc_maybe_increase_stock_levels1() {
    if (isset($_GET['action']) && $_GET['action'] === 'mark_compra_proveedor' && isset($_GET['order_id'])) {
        $order_id = intval($_GET['order_id']);
        $order = wc_get_order($order_id);

        if (!$order) {
            return;
        }

        $stock_reduced = $order->get_data_store()->get_stock_reduced($order_id);
        $trigger_increase = (bool) $stock_reduced;

        // Only continue if we're increasing stock.
        if (!$trigger_increase) {
            return;
        }

        wc_increase_stock_levels($order);

        // Ensure stock is not marked as "reduced" anymore.
        $order->get_data_store()->set_stock_reduced($order_id, false);
    }
}
add_action('woocommerce_order_status_mark_compra_proveedor', 'wc_maybe_increase_stock_levels1');`

备选案文2

/**
 * Función para sumar la cantidad de productos de un pedido al inventario cuando se guarda con el estado "wc-compra-proveedor".
 *
 * @param int $order_id El ID del pedido que se guarda.
 */
function sumar_al_inventario_al_guardar_pedido($order_id) {
    // Obtenemos el objeto del pedido
    $order = wc_get_order($order_id);

    // Verificamos si el pedido tiene el estado "wc-compra-proveedor"
    if ($order && $order->get_status() === 'wc-compra-proveedor') {
        // Recorremos los productos en el pedido y ajustamos el inventario
        foreach ($order->get_items() as $item) {
            $product_id = $item->get_product_id();
            $quantity = $item->get_quantity();

            // Obtén la cantidad actual en inventario del producto
            $current_stock = get_post_meta($product_id, '_stock', true);

            // Calcula la nueva cantidad en inventario sumando la cantidad del pedido
            $new_stock = $current_stock + $quantity;

            // Actualiza la cantidad en inventario del producto
            update_post_meta($product_id, '_stock', max(0, $new_stock)); // Aseguramos que no sea negativo
            update_post_meta($product_id, '_manage_stock', 'yes'); // Habilitamos la gestión de inventario
        }
    }
}

// Hook para ejecutar la función al guardar un pedido
add_action('woocommerce_new_order', 'sumar_al_inventario_al_guardar_pedido');`

如有任何帮助,我们不胜感激.

推荐答案

改为try 以下操作,当订单设置为"COMPRA-PROVEEDOR"状态时,会增加相关产品(S)的库存水平:

add_action('woocommerce_order_status_compra-proveedor', 'purchase_supplier_order_increase_stock_levels');
function purchase_supplier_order_increase_stock_levels( $order_id, $order ) {
    // Loop through order items
    foreach ( $order->get_items() as $item ) { 
        $item_quantity  = $item->get_quantity(); // Order item quantity
        $product        = $item->get_product(); // Product object

        $stock_quantity = $product->get_stock_quantity(); // product stock quantity

        if ( ! $product->get_manage_stock() ) {
            $product->set_manage_stock( true ); // Enable stock management if not set
        }
        $product->set_stock_quantity( $stock_quantity + $item_quantity ); // updated stock quantity
        $product->set_stock_status(); // update stock status to 'instock'       
        $product->save(); // save product changes

        $order->set_order_stock_reduced(true); // Mark order as stock reduced (trick)
        $order->save(); // save order changes (increase stock)
    }
}

它应该起作用.

Php相关问答推荐

如何优化-PHP 7.3.14+Laravel 6

向在添加到购物车上动态创建的WooCommerce产品添加发货类别

根据在WooCommerce购物车和 checkout 中 Select 的送货方式显示快捷代码内容

使用WordPress wp_mail()的邮箱标题无效

如何限制WordPress自定义分类术语页面中的术语数量

获取并判断WooCommerce用户订阅结束日期

由于某种原因,FILE_GET_CONTENTS从一天到另一天停止工作,并在PHP 7.2.34中返回一条&http/1.1 406不能接受&的错误

按列值将二维数组排序为不超过N个的递增组

未检测到laravel控制器

在 WooCommerce 更新结帐事件上动态更新自定义内容

Woocommerce 临时购物车税未根据第一个请求正确计算

需要以一种形式执行两个操作

WooCommerce:如果订单总数为零,则隐藏本地取货运输选项

通过添加计数器修改文本区域表单中的重复值

WooCommerce 订单和邮箱通知的自定义产品描述

Shopware 6 AuthControllerDecorator已弃用

MySQLI bind_param导致的Cannot modify readonly property错误

在 EasyAdmin 中添加全局操作,将我的按钮放在表格下方而不是上方

使用 v-for 的存储链接中的 Img src 在 Laravel vuejs 中不起作用

服务器发送的事件:EventSource 抛出 MIME 错误