Php 从商业中的产品检索库存数量的函数

Php 从商业中的产品检索库存数量的函数,php,wordpress,woocommerce,product,product-quantity,Php,Wordpress,Woocommerce,Product,Product Quantity,我正在尝试创建一个函数,用于从WooCommerce中的产品检索库存量。 如果我注释掉以下行,代码将运行,但如果我保留它,则会出现一个白色屏幕: $product=是否为a($product,'WC\U product')$产品:wc_get_product($product_id) 知道我做错了什么吗 function wc_get_variable_product_stock_quantity( $output = 'raw', $product_id = 0 ){ global $

我正在尝试创建一个函数,用于从WooCommerce中的产品检索库存量。 如果我注释掉以下行,代码将运行,但如果我保留它,则会出现一个白色屏幕: $product=是否为a($product,'WC\U product')$产品:wc_get_product($product_id)

知道我做错了什么吗

function wc_get_variable_product_stock_quantity( $output = 'raw', $product_id = 0 ){
    global $wpdb, $product;

    // Get the product ID (can be defined)
    $product_id = $product_id > 0 ? $product_id : get_the_id();

    // Check and get the instance of the WC_Product Object
    $product = is_a( $product, 'WC_Product' ) ? $product : wc_get_product($product_id);
    $stock_quantity = $product->get_stock_quantity();

    return $stock_quantity;

}

编辑(更新):

我的最终目标是在订单状态更改完成后,将所有变化的库存数量相加,然后将总数写入父产品的库存数量,以便总库存数量始终是最新的

我上面过于简化的示例实际上应该与下面的代码类似,主要基于“”应答代码,并有轻微更改(请参阅附加的SQL语句):

函数wc\u get\u variable\u product\u stock\u quantity($output='raw',$product\u id=0){
全球$wpdb,$product;
//获取产品ID(可以定义)
$product_id=$product_id>0?$product_id:获取_id();
//检查并获取WC_产品对象的实例
$product=is_a($product,'WC_product')?$product:WC_get_product($product_id);
//获取所有产品变体(子项)的库存数量总和
$stock\u quantity=$wpdb->get\u var(“
选择总和(pm.meta_值)
从{$wpdb->prefix}发布为p
在p.ID=pm.post\u ID上将{$wpdb->prefix}postemta作为pm加入
其中p.post_类型=‘产品_变化’
p.post_status='publish'
p.post_parent='$product_id'
和pm.meta_key=''u stock'
并且pm.meta_值不为空
");   
返回$stock\u数量;
}
//当订单状态更改为“已完成”时更新父产品的库存总计。。。
功能mysite\u woodcommerce\u order\u status\u completed($order\u id){
//对于订单中的每个项目,计算所有变化的总库存量,并将总库存量写入父产品的库存量
$order=wc\u get\u order($order\u id);
$order\u id=$order->get\u id();
$log_txt='';
$items=$order->get_items();
foreach($k=>$val的项目){
$product_id=$val['product_id'];
$total_stock_quantity=wc_get_variable_product_stock_quantity('raw',$product_id);
$log\U txt.='Product ID:'.$val['Product\U ID'.],名称:'.$val['Name'.',总库存:'.$Total\U库存数量'.\n
'; //下一步:添加代码将库存总额写入父产品 } } 添加操作('woocommerce\u order\u status\u completed'、'mysite\u woocommerce\u order\u status\u completed',10,1);
您说您想创建一个函数,从WooCommerce中的产品中检索库存量,那么为什么不直接使用这些函数之一呢

  • 对于产品对象实例,使用
    WC\u product
    方法
    get\u stock\u quantity()
  • 或者使用产品ID使用
    get\u post\u meta($product\u ID,''u stock',true)
现在,基于“”答案,您的代码有一些不需要的东西,可以以更轻、更紧凑和更有效的方式进行不同的制作:

function wc_get_variable_product_stock_quantity( $product_id = 0 ){
    // Get the product ID (can be defined)
    $product_id = $product_id > 0 ? $product_id : get_the_ID();

    return get_post_meta( $product_id, '_stock', true );
}
代码进入活动子主题(或活动主题)的function.php文件。它应该更有效

或者您可以直接使用:

get_post_meta( $product_id, '_stock', true );

get_post_meta( get_the_ID(), '_stock', true );

因为我试图使我的代码示例保持简单。对不起,把事情弄糊涂了。我更新了我的问题,添加了一条SQL语句,使其更加清晰。在添加下一段代码之前,我试图弄清楚为什么会出现白色屏幕。谢谢您的帮助。@eCommercePhil您的代码是基于(哪些有效)…您的问题来自于您对它的使用,而不是代码本身(哪些应该有效)。因此,您需要提供更多的上下文,以便我们能够帮助您,因为它是不可测试的。请记住,“寻求调试帮助的问题必须包括所需的行为、特定的问题或错误以及在问题本身“@eCommercePhil…”中重现这些问题所需的最短代码。没有明确问题说明的问题(在定义的上下文中)对其他读者没有用处。很好,谢谢。我添加了调用函数,这样就有了上下文。希望这也能对其他人有用。同时也感谢您的出色示例,我将此作为本文的基础。:-)
get_post_meta( get_the_ID(), '_stock', true );