产品更新后的Woocommerce获得库存

时间:2016-04-20 07:30:37

标签: php wordpress wordpress-plugin woocommerce

我在向' save_post_product'添加操作时遇到问题。钩。 我希望在woocommerce admin中更改(更新)产品时将库存数据发送到我的外部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到达我的代码。当我得到值仍然得到

$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()代码。

2 个答案:

答案 0 :(得分:0)

似乎把动作挂钩到wp_insert_post钩子做了诀窍:

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

答案 1 :(得分:0)

在更新之前触发

save_post。所以你必须使用https://codex.wordpress.org/Plugin_API/Action_Reference/save_post中指定的$ _POST,$ _GET或全局$ post_data

您已使用wp_insert_post解决了这个问题,所以没关系。只是澄清任何人看到这个