2014-11-23 7 views
6

Ich stehe vor einem großen Problem mit Produktvariationen und deren Eigenschaften im Woocommerce. Ich versuche, für jede verfügbare Produktvariante eine Tabelle mit jedem Attribut anzuzeigen. Aber WooCommerce speichert die Attribute in Post-Meta-Complete in Kleinbuchstaben, ersetzt Schrägstriche und deutsche Sonderzeichen wie ü, ö, ä usw. Ich bekomme die Attribute mit $ variation-> get_variation_attributes(). Ich die Datenbank gesucht haben die für Werte speichern Sie zum Beispiel in der Dropdown-Liste im Admin-Panel sehen können, aber sie werden wie dies ohne eine Verbindung zu der Variation sie zugeordnet sind, gespeichert:Attributwerte für Produktvariationen

a:5:{s:10:"bestell-nr";a:6:{s:4:"name";s:11:"Bestell-Nr.";s:5:"value";s:9:"1 | 2 | and so on... 

Wie kann ich Holen Sie sich die Attribute in ihrem korrekten Format zur Anzeige?

Danke für Ihre Hilfe!

Antwort

10

Tatsächlich sind Produktattribute tatsächlich Begriffe in benutzerdefinierten Taxonomien, so dass Sie nur die Begriffe in dieser bestimmten Taxonomie erhalten müssen. Alle Attributtaxonomien sind mit 'pa_' vorangestellt. Ein Größenattribut wäre also eine 'pa_size' Taxonomie. Und die Variations-ID ist die Post-ID für eine Variation.

Aber je nachdem, wie Sie wollen, um es anzuzeigen, WooCommerce hat eine eingebaute Funktion zum Anzeigen einer all Attribute Variation:

Im Folgenden wird eine Definition Attribut Liste aller von einem Variation anzuzeigen.

echo wc_get_formatted_variation($product->get_variation_attributes()); 

Und einen zweiten Parameter von true Leiten einer flachen Liste angezeigt werden:

echo wc_get_formatted_variation($product->get_variation_attributes(), true); 
+0

Vielen Dank für Ihre Antwort, ich habe versucht, die Attribute mit den Bedingungen zu bekommen, aber das Problem, das ich gegenüberstelle, ist, dass sie falsch formatiert sind. Es werden nur Kleinbuchstaben und Sonderzeichen ersetzt. – user3357332

+0

Wenn Sie die ID der Taxonomie kennen, können Sie ['get_the_terms()'] (http://codex.wordpress.org/Function_Reference/get_the_terms) auch so eingeben. Können Sie Ihre Frage bearbeiten, um zu erklären, in welchem ​​Format Sie sie benötigen/warum 'wc_get_formatted_variation()' nicht für Sie funktioniert? – helgatheviking

+0

Danke für das Snippet @helgatheviking, wusste ich nicht über die wc_get_formatted_variation() func ' – Dan

1

So wie ich es unter Verwendung von "get_post_meta" zu tun ist:

echo get_post_meta($variation_id, 'attribute_name_field', true); 
jemand

hofft, dass dies hilft .

+0

Leider gibt das die Lowcased-Version. – piersb

3

Ich wollte nur eines der Variationsattribute anstatt alle von ihnen veröffentlichen; diesen Code beisteuern, falls er für andere hilfreich ist.

get_variation_attributes() erhält alle Attribute

wc_get_formatted_variation() gibt eine formatierte Version des Arrays es

$attributes = $productVariation->get_variation_attributes() ; 
if ($attributes [ 'attribute_pa_colour' ]) { 
    $colour = [ 'attribute_pa_colour' => $attributes [ 'attribute_pa_colour'] ]; 
    echo wc_get_formatted_variation ($colour); 
} 
0

I wp_get_post_terms verwendet geben hat korrekte Varianz Attribute zu erhalten.

global $product; 
    $variations = $product->get_available_variations(); 
    $var = []; 
    foreach ($variations as $variation) { 
     $var[] = $variation['attributes']; 
    } 
    var_dump($var); 
    //xxx to get attribute values with correct lower-upper-mixed-case 
    foreach ($var as $key => $arr) { 
     foreach ($arr as $orig_code => $lowercase_value) { 
     $terms_arr = wp_get_post_terms($product->id, str_replace('attribute_','',$orig_code), array('fields' => 'names')); 
     foreach ($terms_arr as $term) { 
      if (strtolower($term) == $lowercase_value) { 
       $var[$key][$orig_code] = $term; 
       break; 
      } 
     } 
     } 
    } 
    var_dump($var); 

Die Ergebnisse:

Vor harten Code

array (size=1) 
    0 => 
    array (size=2) 
     'attribute_pa_width' => string 'none' (length=4) 
     'attribute_pa_code' => string 'valancese' (length=9) 

Nach harten Code:

array (size=1) 
    0 => 
    array (size=2) 
     'attribute_pa_width' => string 'None' (length=4) 
     'attribute_pa_code' => string 'ValanceSe' (length=9) 
3

Dies scheint für mich zu arbeiten. Hoffe das hilft.

$post = get_post(); 
$id = $post->ID; 
$product_variations = new WC_Product_Variable($id); 
$product_variations = $product_variations->get_available_variations(); 
print_r($product_variations); 

Dies kann in der Klasse-WC-Produkt-Variable gefunden werden.php

Also im Grunde, wenn Sie sich auf dieser Seite umsehen Sie können eine Reihe von nützlichen Funktionen finden.

Hier ist etwas, was ich zusammenstelle.

$product_children = $product_variations->get_children(); 

$child_variations = array(); 

foreach ($product_children as $child){ 

$child_variations[] = $product_variations->get_available_variation($child); 

} 

print_r($child_variations); 
Verwandte Themen