我对Woocommerce的库存管理有一种非常奇怪的行为。在启用库存管理的产品上,库存100件物品和库存状态"可用",每次订单时,产品库存都会变为负数并且缺货。
例如,如果我订购了2件产品,那么即使库存在100之前,库存也会在订单后立即转到-2。
产品很简单,没有任何属性。我使用以下钩子来改变一些标签和东西,但似乎没有一个与这个问题有关:
add_filter('woocommerce_product_single_add_to_cart_text', array(&$this->wc, 'add_to_cart_text'), 11);
add_filter('woocommerce_add_to_cart', array(&$this->wc, 'add_to_cart'), 10, 1);
add_action('woocommerce_cart_item_removed', array(&$this->wc, 'cart_item_removed'), 10, 1);
add_action('woocommerce_order_status_completed', array(&$this->wc, 'order_status_completed'), 10, 1);
add_action('woocommerce_after_shop_loop_item', array(&$this->wc, 'replace_add_to_cart'));
简而言之,woocommerce_product_single_add_to_cart_text
更改了添加到购物车按钮标签,woocommerce_add_to_cart
将一些变量放入会话中,woocommerce_cart_item_removed
删除了从购物车移除项目的会话变量,woocommerce_order_status_completed
使用会话变量做一些事情(从那些会话变量更新CPT - 我根本不接触订单或产品),woocommerce_after_shop_loop_item
在产品列表上显示一个按钮。我试图禁用woocommerce_order_status_completed
钩子,它没有改变任何东西。
如果您认为某些代码可能与此股票发行相关,我会粘贴这些功能的任何代码。
我使用的是最新版的Woocommerce和Wordpress。
答案 0 :(得分:1)
我找到了罪魁祸首,因为helgatheviking建议我逐个禁用所有插件,并发现the theme提供的插件 Progression One Click Import 并标记为&#34 ;建议主题使用"这样做。
我的猜测是它与插件代码中的此过滤器有关:
add_filter( 'add_post_metadata', array( $this, 'check_previous_meta' ), 10, 5 );
这是做什么的:
public function check_previous_meta( $continue, $post_id, $meta_key, $meta_value, $unique ) {
$old_value = get_metadata( 'post', $post_id, $meta_key );
if ( count( $old_value ) == 1 ) {
if ( $old_value[0] === $meta_value ) {
return false;
} elseif ( $old_value[0] !== $meta_value ) {
update_post_meta( $post_id, $meta_key, $meta_value );
return false;
}
}
}
这个缺陷是它插入了股票元值raw(-2)而不是减少现有的元值,Woocommerce似乎在他的结尾处使用了一些过滤器 - 这个过滤器已经过了一个行为。
我想这可以通过更改过滤器优先级来解决,但只是禁用该插件对我有好处,因为我不需要导入预览数据。