我不明白如何将当前帖子的 ID 传递给钩子自定义函数。
代码中的场景是这样的:添加simple产品ID = 13后,其他两种产品(ID = 14和15)的库存水平会以编程方式减少。
此 ID 和数量是使用 SQL 查询从定制 SQL 表(不是元数据)中提取的。
此查询返回一个数组,其中元素数组[0 & 1][0]是ID,元素[1]是数量
数组(2) { [0]=> 数组(3) { [0]=> 字符串(2) "14" [1]=> 字符串(1) "5" [2]=> 字符串(1) "5" } [1]=> 数组(3) { [0]=> 字符串(2) "15" [1]=> 字符串(1) "2" [2]=> 字符串(1) "8" } }
代码
add_action( 'woocommerce_add_to_cart', 'wiz_stock_deduct', 10, 1 );
function wiz_stock_deduct( $product )
{
// retrieve the parts in an array WP query
$thispost_id = $product->ID;
// retrieve parts and quantities
$parts = wiz_checkpoststock ($thispost_id);
if ($parts)
{
for($i=0; $i < count($parts); $i++)
{
$part_id = $parts[$i][0];
$part_quant = $parts[$i][1];
// adjust quantity in stock
//change_part_stock_ammounts ($part_id, $part_quant, 1);
wc_update_product_stock($part_id, $part_quant, 'decrease', false);
}
}
}
手动添加此数组
$parts[]
到代码中是可行的。另外添加 $thispost_id = 13;
,有效。
我假设 SQL 搜索返回一个空数组。
如何获取添加到购物车的产品 ID?
您的代码中存在
woocommerce_add_to_cart
操作挂钩错误(位于第1287行):
do_action( 'woocommerce_add_to_cart', $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data );
如您所见,第一个钩子参数是
$cart_item_key
(但不是 WC_Product
对象)。这就是您无法获取产品 ID 的原因。您可以直接从 $product_id (或 $variation_id) 参数获取产品 ID。
尝试使用以下修改后的代码;
add_action( 'woocommerce_add_to_cart', 'wiz_stock_deduct', 10, 4 );
function wiz_stock_deduct( $cart_item_key, $product_id, $quantity, $variation_id ) {
// Get the product ID:
$_product_id = $variation_id > 0 ? $variation_id : $product_id;
// Get related product data (ID and stock quantity)
if ( $parts = wiz_checkpoststock( $_product_id ) )
{
for( $i = 0; $i < count($parts); $i++ )
{
if ( isset($parts[$i][0]) && isset($parts[$i][0]) )
{
// Adjust stock quantity of related products
wc_update_product_stock( intval($parts[$i][0]), intval($parts[$i][0]), 'decrease', false);
}
}
}
}
代码位于子主题的functions.php 文件中(或插件中)。应该可以。