¿Cómo almacena Woocommerce los atributos de variación y cómo se pueden recuperar por variación?

13 sept 2013, 01:51:56
Vistas: 26K
Votos: 9

Estoy tratando de extraer una lista de variaciones de productos de una instalación de Woocommerce, con sus atributos - algo como esto:

id producto  id variación    nombre    color  talla
5           1234           bañador   azul   10
5           1235           bañador   azul   12
5           1236           bañador   azul   14
5           1237           bañador   rojo   10

Puedo obtener el ID de variación, el ID del producto y el nombre del producto así:

<?php
// Obtener las variaciones
$args = array( 'post_type' => 'product_variation');
$variationloop = new WP_Query( $args );
while ( $variationloop->have_posts() ) : $variationloop->the_post();
// obtener el padre de cada variación
$parent = get_post($post->post_parent); 
// ¿está el producto padre publicado?
if ($parent->post_status=="publish")
{
$parentid=$post->post_parent;
 echo $parentid;  // producto
 echo $id; // id de variación
 echo $parent->post_title;  // nombre del producto
}
?>

Lo que no puedo entender, sin embargo, es cómo Woocommerce vincula una variación con un atributo, como el tamaño. Si hago esto:

 $sizes = get_the_terms($parentid ,'pa_size');
 foreach ( $sizes as $size ) {
   echo $size->name;
 }

entonces puedo obtener todas las tallas en las que el producto podría estar disponible, pero no puedo encontrar cómo recuperar la talla asociada únicamente con la variación 1234.

4
Comentarios

¿Qué tal $attr = get_post_meta($id, '_product_attributes', true); echo '<pre>'; print_r($attr); echo '</pre>'; ?

gmazzap gmazzap
13 sept 2013 04:51:16

Estimado G.M., lamento haberte hecho leer todo eso: acabo de darme cuenta de que soy un perfecto incompetente y estaba ejecutando mi código en mi sitio de prueba, pero mirando los datos de producción en la base de datos MySQL. Así que los IDs no coincidían. Lo siento mucho. Tienes toda la razón en que get_post_meta es la solución a mis problemas, ¡solo necesitaba mirar en la base de datos correcta!

Victoria Victoria
13 sept 2013 11:02:04

Querida Victoria, me haces sonreír :)

gmazzap gmazzap
13 sept 2013 12:00:12

Debo decir que realmente molesta esta actitud de stackexchange de que WooCommerce está fuera de tema. Es una plataforma utilizada por toneladas de personas que usan WordPress. La pregunta es relevante.

Dave Hilditch Dave Hilditch
26 jun 2015 17:23:53
Todas las respuestas a la pregunta 1
1

Los atributos se almacenan en wp_term_relationships.

Ejemplo:

+--------------+-------------------+-------------------+
| object_id    | term_taxonomy_id  | term_taxonomy_id  |
+--------------+-------------------+-------------------+
| 91           | 48                | 0                 |
+--------------+-------------------+-------------------+

El producto 91 tiene el atributo 48

20 sept 2013 23:57:02
Comentarios

También se almacenan en una cadena JSON en wp_postmeta bajo la clave _product_attributes. Presumiblemente están duplicados por razones de rendimiento.

Dave Hilditch Dave Hilditch
26 jun 2015 17:24:41