Php Woocommerce在付款后按ID更新库存

Php Woocommerce在付款后按ID更新库存,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我为WooCommerce创建了一个自定义产品类型。使用此产品类型,可以连接通过ID存在的其他产品 如果下订单且付款成功,WooCommerce将自动减少库存量。 例如,我将ID为4082的产品添加到购物车中,数量为3。 下此订单后,WooCommerce将产品4082中的库存更新为-3 好的,回到我的自定义产品类型。正如我所说,可以通过ID连接另一个产品。 例如,我将产品4082与产品ID 10988连接 如果客户将产品4082添加到购物车并下了我想要的订单,则从产品ID 10988而不是从4

我为WooCommerce创建了一个自定义产品类型。使用此产品类型,可以连接通过ID存在的其他产品

如果下订单且付款成功,WooCommerce将自动减少库存量。 例如,我将ID为4082的产品添加到购物车中,数量为3。 下此订单后,WooCommerce将产品4082中的库存更新为-3

好的,回到我的自定义产品类型。正如我所说,可以通过ID连接另一个产品。 例如,我将产品4082与产品ID 10988连接

如果客户将产品4082添加到购物车并下了我想要的订单,则从产品ID 10988而不是从4082减少库存量

<?php
add_action('woocommerce_checkout_order_processed', 'stocktest');

function stocktest($order_id){
    $order = wc_get_order( $order_id );
    $order_item = $order->get_items();
    foreach( $order_item as $product ) {
    //for the topic I programmed the IDs hardcoded 
        if($product->ID == '4082'){
            wc_update_product_stock( 10998, $product['qty'], 'decrease', '' );
        }
    }
}
?>

我尝试了上面的代码,ID 10998的库存正确减少了,但ID 4082的库存也减少了

我用错钩子了吗?我怎样才能使函数正确

希望有人能帮我


非常感谢

确实
wc\u更新了产品库存(4082美元,$product['qty'],'increase','')不工作

这样,应针对4082产品调整库存

此外,您的代码片段可能存在潜在问题。
$product
变量指的是
4082
产品的产品对象,而不是
10998
产品

也许试试这样的

<?php
add_action('woocommerce_checkout_order_processed', 'stocktest');

function stocktest($order_id){
    $order = wc_get_order( $order_id );
    $order_item = $order->get_items();
    foreach( $order_item as $product ) {
    //for the topic I programmed the IDs hardcoded 
        if($product->ID == '4082'){
            $connected_qty = get_post_meta( 10988, '_stock', true );
            wc_update_product_stock( 10998, $connected_qty, 'decrease', '' );
            wc_update_product_stock( 4082, $product['qty'], 'increase', '' );
        }
    }
}
?>

我对你的问题做了一些研究。WooCommerce调用了很多函数来更新股票af订单/付款。如果下了订单,项目将变为状态“减少库存”是或否。 如果是,请进一步更新此项目的库存。在此之后,WooCommerce创建了电子邮件和订单

所有这些函数一起工作请小心更改文件wc stock functions.php中的代码

如果您想要更改并尝试某些操作,请在本地testserver上执行此操作

这是文件中的一些函数

<?php
wc_maybe_reduce_stock_levels();
wc_maybe_increase_stock_levels();
wc_reduce_stock_levels();
wc_trigger_stock_change_notifications();
?>

<?php
wc_maybe_reduce_stock_levels();
wc_maybe_increase_stock_levels();
wc_reduce_stock_levels();
wc_trigger_stock_change_notifications();
?>