产品更新后的 Woocommerce 获取库存

Posted

技术标签:

【中文标题】产品更新后的 Woocommerce 获取库存【英文标题】:Woocommerce after product update get stock 【发布时间】:2016-04-20 07:30:37 【问题描述】:

我在向“save_post_product”挂钩添加操作时遇到问题。 我想在 woocommerce 管理员中更改(更新)产品时将库存数据发送到我的外部 API。

问题是我在调用操作后从简单产品中获得的库存值是一个“迭代”旧的。我的意思是我得到的股票数据似乎是更新前的数据。所以如果我调用更新产品 2 次,我第一次得到旧数据,第二次得到新数据。

add_action('save_post_product', array($this, 'product_changed'), 99, 3);
function product_changed($post_id, $post, $update)
    
        if ('product' != $post->post_type || $update != true) 
            return;
        
        $_pf = new WC_Product_Factory();
        $product = $_pf->get_product($post_id);
        $items = array();
        if ($product->product_type == 'simple') 
            $product->get_total_stock();
            $inStock = $product->is_in_stock();
            $qty = $product->get_stock_quantity();
            $managing = $product->managing_stock();
            $items[$product->id] = [
                ...
            ];
         elseif ($product->product_type == 'variable') 
            $variations = $product->get_available_variations();
            /*For variations it works properly*/
            
        
        $itemsJson = json_encode($items);
        $this->sendData($itemsJson, '/products-changed/');    
    

TLDR(示例):

假设产品设置为管理库存,库存数量 500 并且有库存。

现在我将产品更改为不管理库存,并将其设置为缺货。 我点击更新。 一切都在运行,wordpress 可以访问我的代码。当我得到值时,我仍然得到 ​​p>

$product->is_in_stock(); //true
$product->get_stock_quantity(); //500
$product->managing_stock(); //yes

现在,当我再次点击更新时,一切都会第二次运行,但现在我得到了正确的值。

$product->is_in_stock(); //false
$product->get_stock_quantity(); //0
$product->managing_stock(); //no

我假设产品库存更新在“save_post_product”挂钩之后运行,但是我找不到任何其他可能解决我的问题的挂钩。

注意:它适用于第一次“迭代”中的变体。我认为它与 $product->get_available_variations() 代码有关。

【问题讨论】:

【参考方案1】:

似乎将动作挂钩到 wp_insert_post 挂钩起到了作用:

add_action('wp_insert_post', array($this, 'product_changed'), 99, 3);

【讨论】:

【参考方案2】:

save_post 在更新之前触发。所以你必须使用https://codex.wordpress.org/Plugin_API/Action_Reference/save_post中指定的$_POST、$_GET或全局$post_data

您已经使用wp_insert_post 解决了这个问题,所以没关系。只是对任何看到此内容的人进行澄清

【讨论】:

以上是关于产品更新后的 Woocommerce 获取库存的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce:woocommerce 查询库存数量简单和可变产品

woocommerce 库存,来自同一库存的多种产品

如果数量超过产品库存,Woocommerce 如何添加消息

Woocommerce - 仅显示库存产品

在 Woocommerce 3 中以编程方式更新产品库存

如何将变体库存状态添加到 Woocommerce 产品变体下拉列表