Cum stochează Woocommerce atributele variațiilor și cum pot fi acestea extrase per variație?

13 sept. 2013, 01:51:56
Vizualizări: 26K
Voturi: 9

Încerc să extrag o listă de variații ale produselor dintr-o instalare Woocommerce, împreună cu atributele lor - ceva de genul:

id produs  id variatie    nume       culoare  marime
5          1234           costum baie albastru 10
5          1235           costum baie albastru 12 
5          1236           costum baie albastru 14
5          1237           costum baie rosu     10

Pot obține ID-ul variației și ID-ul produsului, precum și numele produsului astfel:

<?php
// Obține variațiile
$args = array( 'post_type' => 'product_variation');
$variationloop = new WP_Query( $args );
while ( $variationloop->have_posts() ) : $variationloop->the_post();
// obține părintele fiecărei variații
$parent = get_post($post->post_parent); 
// este produsul părinte publicat? 
if ($parent->post_status=="publish")
{
$parentid=$post->post_parent;
 echo $parentid;  // produs
 echo $id; // id variație
 echo $parent->post_title;  // numele produsului
}
?>

Ceea ce nu reușesc să înțeleg este cum face Woocommerce legătura între o variație și un atribut, cum ar fi mărimea. Dacă fac următorul lucru:

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

pot obține toate mărimile în care ar putea fi disponibil acel produs, dar nu găsesc cum să extrag mărimea asociată doar cu variația 1234.

4
Comentarii

Ce zici de $attr = get_post_meta($id, '_product_attributes', true); echo '<pre>'; print_r($attr); echo '</pre>'; ?

gmazzap gmazzap
13 sept. 2013 04:51:16

Dragă G.M., îmi pare rău că te-am făcut să citești toate acele lucruri: tocmai am realizat că sunt un adevărat prostănac și rulez codul pe site-ul meu de test, dar uitându-mă la datele live din baza de date MySQL. Deci ID-urile nu se potriveau. Îmi cer atât de mult scuze. Ai 100% dreptate că get_post_meta este răspunsul la problemele mele, trebuia doar să mă uit în baza de date potrivită!

Victoria Victoria
13 sept. 2013 11:02:04

Dragă Victoria, mă faci să zâmbesc :)

gmazzap gmazzap
13 sept. 2013 12:00:12

Trebuie să recunosc, e foarte frustrantă atitudinea stackexchange care consideră că WooCommerce este off-topic. Este o platformă folosită de mii de oameni care utilizează WordPress. Întrebarea este relevantă.

Dave Hilditch Dave Hilditch
26 iun. 2015 17:23:53
Toate răspunsurile la întrebare 1
1

Atributele sunt stocate în tabelul wp_term_relationships.

Exemplu:

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

Produsul cu ID-ul 91 are atributul cu ID-ul 48

20 sept. 2013 23:57:02
Comentarii

De asemenea, sunt stocate într-un șir JSON în wp_postmeta la cheia _product_attributes. Se presupune că sunt duplicate din motive de performanță.

Dave Hilditch Dave Hilditch
26 iun. 2015 17:24:41