Obtener atributos de producto Simple en WooCommerce

12 abr 2019, 18:12:17
Vistas: 38.1K
Votos: 2

Necesito obtener los atributos de un producto en WooCommerce, del tipo producto Simple. Algunos productos pueden tener atributos como desplegable (dropdown), pero muchas opciones como botones de radio.

¿Cómo puedo hacer esto? ¿Cómo es posible?

Con las variaciones no tengo problema, pero para productos simples no puedo obtenerlos.

// Obtener todos los atributos de un producto simple $product = wc_get_product($product_id); $attributes = $product->get_attributes(); foreach($attributes as $attribute) { // Obtener el nombre del atributo $attribute_name = $attribute->get_name(); // Obtener los términos/valores del atributo if($attribute->is_taxonomy()) { $attribute_terms = wp_get_post_terms($product->get_id(), $attribute_name, array('fields' => 'names')); } else { $attribute_terms = $attribute->get_options(); } // Mostrar los resultados echo "Atributo: " . wc_attribute_label($attribute_name); echo "Valores: " . implode(', ', $attribute_terms); }
0
Todas las respuestas a la pregunta 2
2

Utilizarás el método WC_Product llamado get_attributes() que devuelve un array como:

global $product;

if ( get_post_type( $post ) === 'product' && ! is_a($product, 'WC_Product') ) {
    $product = wc_get_product( get_the_id() ); // Obtiene el Objeto WC_Product
}

$product_attributes = $product->get_attributes(); // Obtiene los atributos del producto

// Salida en bruto
echo '<pre>'; print_r( $product_attributes ); echo '</pre>';

Debería funcionar (para atributos reales del producto).


Ahora bien, si utilizas algunos plugins de terceros, como complementos de productos adicionales, por ejemplo, estos agregan campos personalizados al producto, pero no son atributos del producto…

12 abr 2019 18:17:39
Comentarios

no está funcionando.

abu abu abu abu
24 oct 2020 06:06:32

Esto obtiene un array de todos los atributos, que puede usarse para obtener un atributo individual reemplazando print_r($product_attributes) con algo como print_r($product_attributes['pa_color']) sin embargo eso solo devuelve un ID del término, por lo que se necesitaría hacer más para obtener el título del término a partir de ese ID.

Nathan Nathan
25 oct 2021 19:06:00
0

Basado en la respuesta de Loic para un atributo de pa_manufacturer:

if ( get_post_type( $post ) === 'product' && ! is_a($product, 'WC_Product') ) {
    $product = wc_get_product( get_the_id() ); // Obtiene el objeto WC_Product
}

$product_attributes = $product->get_attributes(); // Obtiene los atributos del producto

// Salida
$manufacturer_id = $product_attributes['pa_manufacturer']['options']['0']; // devuelve el ID del término
$manufacturer_name = get_term( $manufacturer_id )->name; // obtiene el nombre del término desde el ID
echo '<p class="manufacturer">'.$manufacturer_name.'</p>'; // muestra el nombre real del término
25 oct 2021 19:10:46