Cómo obtener atributos de productos personalizados en la plantilla de productos personalizados en woocommerce

3 minutos de lectura

avatar de usuario
código poeta

Creé un producto variable usando el complemento de woocommerce. En la variable producto he creado un atributo personalizado “Duración de la licencia“con valores”3 meses | 6 meses | 1 año | Toda la vida“.

Ahora quiero mostrar este atributo en una plantilla de producto individual personalizada.

He intentado siguientes soluciones

1.

$licenseDurations = get_the_terms( $post->ID, 'attribute_license-duration' );

Esto muestra lo siguiente var_dump($licenseDurations); `

object(WP_Error)[558]
  public 'errors' => 
    array (size=1)
      'invalid_taxonomy' => 
        array (size=1)
          0 => string 'Invalid taxonomy' (length=16)
  public 'error_data' => 
    array (size=0)
    empty`

y

2.

global $product;
$licenseDuration = $product->get_attribute( 'License Duration' ); // Here I also tried attribute slug `attribute_license-duration` instead of `License Duration` but no use

Referencia: https://stackoverflow.com/a/13454788/2758870

y

3.

global $product;
$licenseDurations = get_the_terms( $product->id, 'License Duration');

foreach ( $licenseDurations as $licenseDuration ) 
{
    echo $licenseDuration->name;
}

en los dos casos anteriores no obtuve nada porque $product; esta regresando null en var_dump($product)

4. También he probado este código http://isabelcastillo.com/woocommerce-product-attributes-functions

llamando directamente isa_woo_get_one_pa() donde quiero mostrar valores. pero sin suerte.

Alguien aquí por favor ayuda…

  • Los atributos del producto comienzan con pa_ . En su primer intento, cambie attribute_license-duration a pa_license-duration

    – Anand Shah

    28/09/2015 a las 15:37


  • @AnandShah… lo intenté pa_license-duration pero esta regresando Taxonomía no válida error en var_dump. alguna otra solución por favor

    – Código Poeta

    29 de septiembre de 2015 a las 5:52


  • Lo he comprobado localmente creando un atributo con el mismo nombre y funciona bien.

    – Anand Shah

    29 de septiembre de 2015 a las 5:54

  • @AnandShah… Descargué la base de datos y no encontré pa_license-duration atributo en la búsqueda. En cambio, encontré attribute_license-duration

    – Código Poeta

    29 de septiembre de 2015 a las 7:38

  • Eso suena extraño, ¿qué versión de WooCommerce estás usando? Vaya a Productos -> Atributos, haga clic en “Duración de la licencia” y verifique la URL, ¿cómo se ve la URL?

    – Anand Shah

    29 de septiembre de 2015 a las 8:01

Puedes intentar lo siguiente

1.get_post_meta para obtener los atributos del producto

$attr = get_post_meta( 123, '_product_attributes' ); // replace 123 with the actual product id 
print_r( $attr );

2. O puede crear un objeto de producto y luego usar el get_attributes método

$p = new WC_Product( 123 ); // // replace 123 with the actual product id 
print_r( $p->get_attributes() );

No estoy seguro si hay cambios en woocommerce, arriba no dio el valor del atributo. Siguiente publicación de este página dio la respuesta correcta

// reemplazar pa_attribute con su nombre de atributo, pero mantenga el pa_ prefijo
// p.ej pa_weight

$fabric_values = get_the_terms( $product->id, 'pa_attribute');

foreach ( $fabric_values as $fabric_value ) {
  echo $fabric_value->name;
}

Aquí está la lista de todos los atributos del producto. Espero que esto te ayude.

$product_attributes = get_post_meta( $post->ID, '_product_attributes' ); 
foreach ( $product_attributes as $group_attributes ) {
    foreach ( $group_attributes as $attributes ) {
      echo $attributes['name'].'=>'.$attributes['value'];
    }
}

¿Ha sido útil esta solución?