我非常需要帮助。我正在尝试以编程方式更新 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>";
然后我更新从提要中获得的库存。这可以是库存从零到 x 或 x 到零以及之间的任何位置。这就是我更新缺货的方式:
$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 https://i.stack.imgur.com/blUiM.jpg
数据在管理面板的产品视图中正确显示。顺便说一句,这个 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 管理面板不会将缺货情况汇总到父级,我必须进行快速编辑和更新才能实现这一点。
- 基本上,后端看到了变化,但前端并没有真正正确显示。
任何人都可以提供的任何帮助将不胜感激!
谢谢