我需要帮助。我正在尝试通过编程方式更新woocommerce产品的库存数量。我们通过一些JSON向供应商提供馈送。我可以从馈送中读取库存,并且可以正确地从文章元数据中提取数据。我正在使用最新版本的WP和WOO。 PHP为7.2
以下是我如何通过SKU查找产品ID。
$product_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $sku ) );
这返回了正确的ID,我可以使用它来查看已经存在的当前元数据:
$website_stock = get_post_meta($product_id, '_stock', true);
echo "Website Stock - " . $website_stock . "</br>";
$website_stock_status = get_post_meta($product_id, '_stock_status', true);
echo "Website Stock Status - " . $website_stock_status . "</br>";
我随后会更新从数据源获取到的库存。这些库存可能从0变为x,或从x变为0,或者处于中间任何位置。以下是我如何更新缺货状态:
$out_of_stock_staus = 'outofstock';
update_post_meta($product_id, '_stock', 0);
update_post_meta($product_id, '_stock_status', wc_clean( $out_of_stock_staus ));
wc_delete_product_transients( $product_id ); // Clear/refresh the variation cache
事情变得有些奇怪。
在管理面板的产品视图中,数据显示正确。另外,这个SKU可能属于一个变体(我们有很多这样的产品),或者它可能是一个简单的产品。最后,它们似乎都能正常更新。我看不到任何错误被生成。
我在functions.php中使用了一小段PHP代码片段,在下拉菜单中将售罄的商品置为灰色。这里是代码:
/* Grey out out of stock items in the product dropdown */
add_filter( 'woocommerce_variation_is_active', 'grey_out_variations_when_out_of_stock', 10, 2 );
function grey_out_variations_when_out_of_stock( $grey_out, $variation ) {
if ( ! $variation->is_in_stock() )
return false;
return true;
}
问题如下:
- 现在缺货的商品不应该在下拉菜单中显示为可点击的,但事实上仍然可以点击。
- 前端的库存并不总是显示为零,允许您选择一个商品,然后才会显示没有库存,因此“添加到购物车”按钮处于活动状态,但实际上不应该是这样。因此,前端没有看到更新。
- Woocommerce产品的管理面板没有将缺货信息汇总到父级,我必须进行快速编辑和更新才能发生这种情况。
- 基本上,后端看到了更改,但前端并没有正确显示。
任何人提供的帮助都将不胜感激!
谢谢