attributes - productos - Valores de atributo para variaciones de producto
plugin variaciones woocommerce (5)
Usé wp_get_post_terms para obtener los atributos de varianza correctos.
global $product;
$variations = $product->get_available_variations();
$var = [];
foreach ($variations as $variation) {
$var[] = $variation[''attributes''];
}
var_dump($var);
//xxx to get attribute values with correct lower-upper-mixed-case
foreach ($var as $key => $arr) {
foreach ($arr as $orig_code => $lowercase_value) {
$terms_arr = wp_get_post_terms( $product->id, str_replace(''attribute_'','''',$orig_code), array( ''fields'' => ''names'' ) );
foreach ($terms_arr as $term) {
if (strtolower($term) == $lowercase_value) {
$var[$key][$orig_code] = $term;
break;
}
}
}
}
var_dump($var);
Los resultados:
Antes del código difícil
array (size=1)
0 =>
array (size=2)
''attribute_pa_width'' => string ''none'' (length=4)
''attribute_pa_code'' => string ''valancese'' (length=9)
Después del código difícil:
array (size=1)
0 =>
array (size=2)
''attribute_pa_width'' => string ''None'' (length=4)
''attribute_pa_code'' => string ''ValanceSe'' (length=9)
Me enfrenta un gran problema con las variaciones del producto y sus atributos en woocommerce. Estoy tratando de mostrar una tabla con cada atributo para cada variación de producto disponible. Pero WooCommerce guarda los atributos en la publicación metacompleta en minúsculas, reemplaza las barras y los caracteres especiales alemanes como ü, ö, ä, etc. Obtengo los atributos con $ variation-> get_variation_attributes (). He buscado en la base de datos los valores guardados que puede ver, por ejemplo, en el menú desplegable del panel de administración, pero se guardan de esta manera sin un enlace a la variación a la que están asignados:
a:5:{s:10:"bestell-nr";a:6:{s:4:"name";s:11:"Bestell-Nr.";s:5:"value";s:9:"1 | 2 | and so on...
¿Cómo puedo obtener los atributos en su formato correcto para mostrar?
¡Gracias por tu ayuda!
En realidad, los atributos del producto son en realidad términos en taxonomías personalizadas, por lo que solo necesita obtener los términos en esa taxonomía en particular. Todas las taxonomías de atributos tienen un prefijo ''pa_''. Entonces, un atributo de tamaño sería una taxonomía ''pa_size''. Y el ID de variación es el ID de publicación de una variación.
Pero dependiendo de cómo quiera mostrarlo, WooCommerce tiene una función integrada para mostrar todos los atributos de una variación:
Lo siguiente mostrará una lista de definición de todos los atributos de variaciones.
echo wc_get_formatted_variation( $product->get_variation_attributes() );
Y pasar un segundo parámetro de true
mostrará una lista plana:
echo wc_get_formatted_variation( $product->get_variation_attributes(), true );
La forma en que lo hago es usando "get_post_meta":
echo get_post_meta( $variation_id, ''attribute_name_field'', true);
Espera que esto ayude a alguien.
Solo quería publicar uno de los atributos de variación en lugar de todos ellos; contribuyendo con este código en caso de que sea útil para cualquier otra persona.
get_variation_attributes () obtiene todos los atributos
wc_get_formatted_variation () devuelve una versión formateada de la matriz que se entregó
$attributes = $productVariation->get_variation_attributes() ;
if ( $attributes [ ''attribute_pa_colour'' ] ) {
$colour = [ ''attribute_pa_colour'' => $attributes [ ''attribute_pa_colour''] ];
echo wc_get_formatted_variation ( $colour );
}
Esto parece funcionar para mí. Espero que esto ayude.
$post = get_post();
$id = $post->ID;
$product_variations = new WC_Product_Variable( $id );
$product_variations = $product_variations->get_available_variations();
print_r($product_variations);
Esto se puede encontrar en class-wc-product-variable.php
Así que, básicamente, si miras a tu alrededor en esa página puedes encontrar muchas funciones útiles.
Aquí hay algo que armé.
$product_children = $product_variations->get_children();
$child_variations = array();
foreach ($product_children as $child){
$child_variations[] = $product_variations->get_available_variation($child);
}
print_r($child_variations);