visuales variaciones tienda producto plugin personalizados campos atributos atributo agregar php wordpress woocommerce products custom-taxonomy

php - variaciones - Obtenga atributos de productos personalizados en WooCommerce



plugin variaciones woocommerce (9)

Estoy tratando de obtener productos con valores de atributo personalizados, pero estoy fallando miserablemente en hacerlo.

Intenté hacer:

global $woocommerce, $post, $product; $res = get_post_meta($product->id); print_r(unserialize($res[''_product_attributes''][0]));

Y obtengo estos datos sin procesar:

[pa_koostis] => Array ( [name] => pa_koostis [value] => [position] => 0 [is_visible] => 1 [is_variation] => 0 [is_taxonomy] => 1 )

Sé que hay un valor porque lo muestra en la sección de atributos, pero no puedo encontrar la manera de mostrarlo en mi código personalizado.


Editado : woocommerce_get_product_terms está en desuso desde Woocommerce versión 3

Vaya con lo siguiente como @datafeedr escribió en su respuesta :

global $product; $koostis = array_shift( wc_get_product_terms( $product->id, ''pa_koostis'', array( ''fields'' => ''names'' ) ) );

o incluso más compacto:

global $product; $koostis = $product->get_attribute( ''pa_koostis'' );

Respuesta original:

$result = array_shift(woocommerce_get_product_terms($product->id, ''pa_koostis'', ''names''));


Actualización para 2016. Puede usar:

global $product; echo $product->list_attributes();

Para personalizar el resultado, copie plugins/woocommerce/templates/single-product/product-attributes.php a themes/theme-child/woocommerce/single-product/product-attributes.php y modifique eso.


Intente obtener una matriz de nombre de atributo => valor (es) de atributo:

global $product; $formatted_attributes = array(); $attributes = $product->get_attributes(); foreach($attributes as $attr=>$attr_deets){ $attribute_label = wc_attribute_label($attr); if ( isset( $attributes[ $attr ] ) || isset( $attributes[ ''pa_'' . $attr ] ) ) { $attribute = isset( $attributes[ $attr ] ) ? $attributes[ $attr ] : $attributes[ ''pa_'' . $attr ]; if ( $attribute[''is_taxonomy''] ) { $formatted_attributes[$attribute_label] = implode( '', '', wc_get_product_terms( $product->id, $attribute[''name''], array( ''fields'' => ''names'' ) ) ); } else { $formatted_attributes[$attribute_label] = $attribute[''value'']; } } } //print_r($formatted_attributes); return $formatted_attributes;

Es poco ineficiente, pero funciona.



Obtendrá atributos como matriz en "$ formatted_attributes"

$attributes = $product->get_attributes(); foreach($attributes as $attr=>$attr_deets){ $attribute_label = wc_attribute_label($attr); if ( isset( $attributes[ $attr ] ) || isset( $attributes[ ''pa_'' . $attr ] ) ) { $attribute = isset( $attributes[ $attr ] ) ? $attributes[ $attr ] : $attributes[ ''pa_'' . $attr ]; if ( $attribute[''is_taxonomy''] ) { $formatted_attributes[$attribute_label] = wc_get_product_terms( $product->id, $attribute[''name'']); } else { $formatted_attributes[$attribute_label] = $attribute[''value'']; } } } print_r($formatted_attributes);


Puede obtener el valor único para el atributo con el siguiente código:

$pa_koostis_value = get_post_meta($product->id, ''pa_koostis'', true);


Use el código a continuación para obtener todos los atributos con detalles

global $wpdb; $attribute_taxonomies = $wpdb->get_results( "SELECT * FROM " . $wpdb->prefix . "woocommerce_attribute_taxonomies WHERE attribute_name != '''' ORDER BY attribute_name ASC;" ); set_transient( ''wc_attribute_taxonomies'', $attribute_taxonomies ); $attribute_taxonomies = array_filter( $attribute_taxonomies ) ; prin_r($attribute_taxonomies);


woocommerce_get_product_terms() ahora está en desuso.

Use wc_get_product_terms() lugar.

Ejemplo:

global $product; $koostis = array_shift( wc_get_product_terms( $product->id, ''pa_koostis'', array( ''fields'' => ''names'' ) ) );


Más actualizada:

$product->get_attribute( ''your_attr'' );

Deberá definir $product si no está en la página.