php - variaciones - Mostrar el estado del stock al lado de cada valor de atributo en los productos variables de WooCommerce
variacion de precios woocommerce (1)
Quiero implementar en mi tienda algo similar como este:
Tengo este código, pero esta muestra la cantidad al lado de cada variación.
function get_stock_variations_from_product(){
global $product;
$variations = $product->get_available_variations();
foreach($variations as $variation){
$variation_id = $variation[''variation_id''];
$variation_obj = new WC_Product_variation($variation_id);
$stock = $variation_obj->get_stock_quantity();
}
}
Y también este código:
global $product;
$product_variations = $product->get_available_variations();
foreach ($product_variations as $variation) {
$var_data = $variation[''attributes''];
$var_data[''in_stock''] = $variation[''is_in_stock''];
}
//List all attributes with stock available or not array..
echo ''<pre>'';
print_r($var_data);
echo ''</pre>'';
die;
¿Cómo puedo personalizar los productos variables para mostrar el estado de stock al lado de cada valor de atributo?
Gracias
Compatibilidad actualizada con WooCommerce o versión anterior 2.6.x
Puede hacerlo utilizando una función personalizada enganchada en woocommerce_variation_option_name
filter hook. Esto solo es viable para productos que tienen un atributo único para sus variaciones ...
Aquí está el código:
add_filter( ''woocommerce_variation_option_name'', ''customizing_variations_terms_name'', 10, 1 );
function customizing_variations_terms_name( $term_name ){
if(is_admin())
return $term_name;
global $product;
$second_loop_stoped = false;
// Get available product variations
$product_variations = $product->get_available_variations();
// Iterating through each available product variation
foreach($product_variations as $variation){
$variation_id = $variation[''variation_id''];
$variation_obj = new WC_Product_Variation( $variation_id );
## WOOCOMMERCE RETRO COMPATIBILITY ##
if ( version_compare( WC_VERSION, ''3.0'', ''<'' ) ) # BEFORE Version 3 (older)
{
$stock_status = $variation_obj->stock_status;
$stock_qty = intval($variation_obj->stock);
// The attributes WC slug key and slug value for this variation
$attributes_arr = $variation_obj->get_variation_attributes();
}
else # For newest verions: 3.0+ (and Up)
{
$stock_status = $variation_obj->get_stock_status();
$stock_qty = $variation_obj->get_stock_quantity();
// The attributes taxonomy key and slug value for this variation
$attributes_arr = $variation_obj->get_attributes();
}
if(count($attributes_arr) != 1) // Works only for 1 attribute set in the product
return $term_name;
// Get the terms for this attribute
foreach( $attributes_arr as $attr_key => $term_slug){
// Get the attribute taxonomy
$term_key = str_replace(''attribute_'', '''', $attr_key );
// get the corresponding term object
$term_obj = get_term_by( ''slug'', $term_slug, $term_key );
if( $term_obj->name == $term_name ){ // If the term name matches we stop the loops
$second_loop_stoped = true;
break;
}
}
if($second_loop_stoped)
break;
}
if( $stock_qty>0 )
return $term_name .= '' - '' . $stock_status . '' (''.$stock_qty.'')'';
else
return $term_name .= '' - '' . $stock_status;
}
El código va en el archivo function.php de su tema hijo activo (o tema) o también en cualquier archivo de complemento.
Este código funciona y se prueba en WooCommerce 2.6.xy 3+.
Obtendrás esto (por ejemplo):
Puede utilizar otros métodos WC_Product_Variation o WC_Product para obtener y visualizar los datos que desea ...