Come WooCommerce memorizza gli attributi delle variazioni e come possono essere recuperati per variazione?

13 set 2013, 01:51:56
Visualizzazioni: 26K
Voti: 9

Sto cercando di estrarre un elenco di variazioni di prodotto da un'installazione WooCommerce, con i loro attributi - qualcosa del genere:

id prodotto  id variazione  nome      colore  taglia
5           1234           costume    blu     10
5           1235           costume    blu     12
5           1236           costume    blu     14
5           1237           costume    rosso   10

Posso ottenere l'ID della variazione, l'ID del prodotto e il nome del prodotto in questo modo:

<?php
// Ottieni le variazioni
$args = array( 'post_type' => 'product_variation');
$variationloop = new WP_Query( $args );
while ( $variationloop->have_posts() ) : $variationloop->the_post();
// ottieni il genitore di ogni variazione
$parent = get_post($post->post_parent); 
// il prodotto genitore è attivo?
if ($parent->post_status=="publish")
{
$parentid=$post->post_parent;
 echo $parentid;  // prodotto
 echo $id; // id variazione
 echo $parent->post_title;  // nome prodotto
}
?>

Quello che non riesco a capire, però, è come WooCommerce collega una variazione a un attributo, come la taglia. Se faccio questo:

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

posso ottenere tutte le taglie in cui il prodotto potrebbe essere disponibile, ma non riesco a trovare come recuperare la taglia associata solo alla variazione 1234.

4
Commenti

Che ne dici di $attr = get_post_meta($id, '_product_attributes', true); echo '<pre>'; print_r($attr); echo '</pre>'; ?

gmazzap gmazzap
13 set 2013 04:51:16

Caro G.M., mi dispiace averti fatto leggere tutto questo: ho appena realizzato di essere un perfetto incompetente e stavo eseguendo il mio codice sul sito di test, ma guardando i dati live nel database MySQL. Quindi gli ID non corrispondevano. Mi dispiace davvero tanto. Hai perfettamente ragione che get_post_meta è la soluzione ai miei problemi, dovevo solo guardare nel dannato database giusto!

Victoria Victoria
13 set 2013 11:02:04

Cara Victoria, mi fai sorridere :)

gmazzap gmazzap
13 set 2013 12:00:12

Devo dire che è davvero fastidiosa questa mentalità di stackexchange che considera WooCommerce fuori tema. È una piattaforma, utilizzata da tantissime persone che usano Wordpress. La domanda è pertinente.

Dave Hilditch Dave Hilditch
26 giu 2015 17:23:53
Tutte le risposte alla domanda 1
1

Gli attributi sono memorizzati nella tabella wp_term_relationships.

Esempio:

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

Il prodotto 91 ha un attributo con ID 48

20 set 2013 23:57:02
Commenti

Sono anche memorizzati in una stringa JSON nella tabella wp_postmeta associata alla chiave _product_attributes. Presumibilmente sono duplicati per motivi di prestazioni.

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