从 Woocommerce 中的可变产品中获取所有变体的总库存
Get the total stock of all variations from a variable product In Woocommerce
IN woocommerce 我想显示可变产品中所有变体的总库存。每个产品变体的库存在产品变体级别进行管理。
如果我用于可变产品:
global $product;
echo $product->get_stock_quantity();
我不知道该产品所有变体的总库存量。
是否可以从 Woocommerce 中的可变产品中获取所有变体的总库存?
以下自定义函数将显示可变产品(仅)的所有产品变体库存数量的总和。
它使用一个非常简单的 SQL 查询,从可变产品中计算出所有子变体的总和。
Note: The stock need to be managed at product variation level.
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);
// Only for variable product type
if( $product->is_type('variable') ){
// Get the stock quantity sum of all product variations (children)
$stock_quantity = $wpdb->get_var("
SELECT SUM(pm.meta_value)
FROM {$wpdb->prefix}posts as p
JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
WHERE p.post_type = 'product_variation'
AND p.post_status = 'publish'
AND p.post_parent = '$product_id'
AND pm.meta_key = '_stock'
AND pm.meta_value IS NOT NULL
");
// Preparing formatted output
if ( $stock_quantity > 0 ) {
$html = '<p class="stock in-stock">'. sprintf( __("%s in stock", "woocommerce"), $stock_quantity ).'</p>';
} else {
if ( is_numeric($stock_quantity) )
$html = '<p class="stock out-of-stock">' . __("Out of stock", "woocommerce") . '</p>';
else
$html = '';
}
// Different output options
if( $output == 'echo_html' )
echo $html;
elseif( $output == 'return_html' )
return $html;
else
return $stock_quantity;
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
使用情况(3 例):
1) php 代码中的任意位置,获取库存数量(来自动态 $product_id
):
$stock_quantity = wc_get_variable_product_stock_quantity( 'raw', $product_id );
2) 在商店和档案页面中显示(在价格范围内示例):
add_action( 'woocommerce_after_shop_loop_item_title', 'display_variable_product_stock_quantity', 20 );
function display_variable_product_stock_quantity(){
wc_get_variable_product_stock_quantity( 'echo_html' );
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。
3) 单品页面展示(价格范围内示例):
add_action( 'woocommerce_single_product_summary', 'display_variable_product_stock_quantity', 15 );
function display_variable_product_stock_quantity(){
wc_get_variable_product_stock_quantity( 'echo_html' );
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。
add_action( 'woocommerce_before_add_to_cart_button', 'get_selected_variation_stock' );
function get_selected_variation_stock() {
global $product;
if ($product->is_type( 'variable' ))
{
$avail_vari = $product->get_available_variations();
foreach ($avail_vari as $key => $value)
{
$vari_id = $value['variation_id'];
$vari_colr = $value['attributes']['attribute_pa_colour'];
$vari_obj = new WC_Product_variation($vari_id);
$vari_stock = $vari_obj->get_stock_quantity();
echo $vari_colr . ": " . $vari_stock . " ";
}
}
将此代码粘贴到您的主题 function.php 中,祝您工作顺利。
此函数 returns 如果产品不是可变产品或在产品级别启用了库存管理,则总库存数量。
否则它会计算每个变体的总库存。
您可以将此功能放在例如functions.php中。并这样称呼它:
<?php
global $product;
$stockQuantity = get_total_combined_stock_quantity($product);
?>
function get_total_combined_stock_quantity($product)
{
if (!$product->is_type('variable')) {
return $product->get_stock_quantity();
}
//Stock management is enabled at product level
if ($product->managing_stock()) {
return $product->get_stock_quantity();
}
$total = 0;
if ($product->is_type('variable')) {
foreach ($product->get_visible_children() as $variationId) {
$variation = wc_get_product($variationId);
$total += $variation->get_stock_quantity();
}
}
return $total;
}
IN woocommerce 我想显示可变产品中所有变体的总库存。每个产品变体的库存在产品变体级别进行管理。
如果我用于可变产品:
global $product;
echo $product->get_stock_quantity();
我不知道该产品所有变体的总库存量。
是否可以从 Woocommerce 中的可变产品中获取所有变体的总库存?
以下自定义函数将显示可变产品(仅)的所有产品变体库存数量的总和。
它使用一个非常简单的 SQL 查询,从可变产品中计算出所有子变体的总和。
Note: The stock need to be managed at product variation level.
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);
// Only for variable product type
if( $product->is_type('variable') ){
// Get the stock quantity sum of all product variations (children)
$stock_quantity = $wpdb->get_var("
SELECT SUM(pm.meta_value)
FROM {$wpdb->prefix}posts as p
JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
WHERE p.post_type = 'product_variation'
AND p.post_status = 'publish'
AND p.post_parent = '$product_id'
AND pm.meta_key = '_stock'
AND pm.meta_value IS NOT NULL
");
// Preparing formatted output
if ( $stock_quantity > 0 ) {
$html = '<p class="stock in-stock">'. sprintf( __("%s in stock", "woocommerce"), $stock_quantity ).'</p>';
} else {
if ( is_numeric($stock_quantity) )
$html = '<p class="stock out-of-stock">' . __("Out of stock", "woocommerce") . '</p>';
else
$html = '';
}
// Different output options
if( $output == 'echo_html' )
echo $html;
elseif( $output == 'return_html' )
return $html;
else
return $stock_quantity;
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
使用情况(3 例):
1) php 代码中的任意位置,获取库存数量(来自动态 $product_id
):
$stock_quantity = wc_get_variable_product_stock_quantity( 'raw', $product_id );
2) 在商店和档案页面中显示(在价格范围内示例):
add_action( 'woocommerce_after_shop_loop_item_title', 'display_variable_product_stock_quantity', 20 );
function display_variable_product_stock_quantity(){
wc_get_variable_product_stock_quantity( 'echo_html' );
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。
3) 单品页面展示(价格范围内示例):
add_action( 'woocommerce_single_product_summary', 'display_variable_product_stock_quantity', 15 );
function display_variable_product_stock_quantity(){
wc_get_variable_product_stock_quantity( 'echo_html' );
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。
add_action( 'woocommerce_before_add_to_cart_button', 'get_selected_variation_stock' ); function get_selected_variation_stock() { global $product; if ($product->is_type( 'variable' )) { $avail_vari = $product->get_available_variations(); foreach ($avail_vari as $key => $value) { $vari_id = $value['variation_id']; $vari_colr = $value['attributes']['attribute_pa_colour']; $vari_obj = new WC_Product_variation($vari_id); $vari_stock = $vari_obj->get_stock_quantity(); echo $vari_colr . ": " . $vari_stock . " "; } }
将此代码粘贴到您的主题 function.php 中,祝您工作顺利。
此函数 returns 如果产品不是可变产品或在产品级别启用了库存管理,则总库存数量。
否则它会计算每个变体的总库存。
您可以将此功能放在例如functions.php中。并这样称呼它:
<?php
global $product;
$stockQuantity = get_total_combined_stock_quantity($product);
?>
function get_total_combined_stock_quantity($product)
{
if (!$product->is_type('variable')) {
return $product->get_stock_quantity();
}
//Stock management is enabled at product level
if ($product->managing_stock()) {
return $product->get_stock_quantity();
}
$total = 0;
if ($product->is_type('variable')) {
foreach ($product->get_visible_children() as $variationId) {
$variation = wc_get_product($variationId);
$total += $variation->get_stock_quantity();
}
}
return $total;
}