2012-11-14 15 views
34

Ich versuche, Produkte benutzerdefinierte Attributwerte zu bekommen, aber ich bin kläglich versäumt, dies zu tun. Ich versuchteWie bekomme ich ein Produkt benutzerdefinierte Attribute von WooCommerce

global $woocommerce, $post, $product; 
$res = get_post_meta($product->id); 
print_r(unserialize($res['_product_attributes'][0])); 

Aber ich bin immer

[pa_koostis] => Array 
     (
      [name] => pa_koostis 
      [value] => 
      [position] => 0 
      [is_visible] => 1 
      [is_variation] => 0 
      [is_taxonomy] => 1 
     ) 

Ich weiß, dass ein Wert ist, weil sie es in dem Attribut Abschnitt zeigt, aber ich kann nicht finden, nur einen Weg, um es in zu zeigen, mein benutzerdefinierter Code

Antwort

58

Editiert: Ab 2.1 woocommerce_get_product_terms veraltete

mit folgendem gehen, wie datafeedr in hes schrieb beantworten:

global $product; 
$koostis = array_shift(wc_get_product_terms($product->id, 'pa_koostis', array('fields' => 'names'))); 

oder

global $product; 
$koostis = $product->get_attribute('pa_koostis'); 

Ursprüngliche Antwort:

$result = array_shift(woocommerce_get_product_terms($product->id, 'pa_koostis', 'names')); 
+1

vielen Dank für Ihre Antwort, es war sehr hilfreich. –

+1

können Sie bitte überprüfen Sie diese https://stackoverflow.com/questions/47766480/woocommerce-custom-shop-page-with-infinte-load –

12

Sie können den einzelnen Wert für das Attribut mit folgendem Code erhalten:

$pa_koostis_value = get_post_meta($product->id, 'pa_koostis', true); 
+1

Jede Idee, um alle für immer Attribute auf einmal? – ravisoni

+2

@ravisoni 'get_post_meta ($ prodict-> id, '_product_attributes');' – EHerman

10

woocommerce_get_product_terms() ist veraltet.

Verwenden Sie stattdessen wc_get_product_terms().

Beispiel:

global $product; 
$koostis = array_shift(wc_get_product_terms($product->id, 'pa_koostis', array('fields' => 'names'))); 
+5

Dies ist richtig. Ich glaube, dass alles in Version 2.1 soft-deprecated war. – helgatheviking

+0

Ich bekomme -> Hinweis: Nur Variablen sollten als Referenz übergeben werden. Woocommerce Version 3.2.6. Code ---> $ date = array_shift (wc_get_product_terms ($ produkt-> get_id(), 'pa_date', array ('felder' => 'namen'))); Was kann falsch sein? Ich kann es nicht lösen. Ich bekomme 'Null' von gettype ($ date) – Kristis

8

meisten aktualisiert:

$product->get_attribute('your_attr'); 

Sie müssen $product definieren, wenn es nicht auf der Seite ist.

8

dieses Versuchen eine Reihe von Attribut name => Attributwert (e) zu erhalten:

global $product; 

$formatted_attributes = array(); 

$attributes = $product->get_attributes(); 

foreach($attributes as $attr=>$attr_deets){ 

    $attribute_label = wc_attribute_label($attr); 

    if (isset($attributes[ $attr ]) || isset($attributes[ 'pa_' . $attr ])) { 

     $attribute = isset($attributes[ $attr ]) ? $attributes[ $attr ] : $attributes[ 'pa_' . $attr ]; 

     if ($attribute['is_taxonomy']) { 

      $formatted_attributes[$attribute_label] = implode(', ', wc_get_product_terms($product->id, $attribute['name'], array('fields' => 'names'))); 

     } else { 

      $formatted_attributes[$attribute_label] = $attribute['value']; 
     } 

    } 
} 

//print_r($formatted_attributes); 

return $formatted_attributes; 

Es ist wenig ineffizient aber funktioniert der Trick.

9

Update für 2016. Sie können mit:

global $product; 
echo $product->list_attributes(); 

die Ausgabe anzupassen, kopieren plugins/woocommerce/templates/single-product/product-attributes.php-themes/theme-child/woocommerce/single-product/product-attributes.php und ändern.

+1

Es funktioniert wirklich für mich .. Danke David –

1

Sie werden in "$ formatted_attributes" Attribute als Array erhalten

  $attributes = $product->get_attributes(); 

      foreach($attributes as $attr=>$attr_deets){ 

       $attribute_label = wc_attribute_label($attr); 

       if (isset($attributes[ $attr ]) || isset($attributes[ 'pa_' . $attr ])) { 

        $attribute = isset($attributes[ $attr ]) ? $attributes[ $attr ] : $attributes[ 'pa_' . $attr ]; 

        if ($attribute['is_taxonomy']) { 

         $formatted_attributes[$attribute_label] = wc_get_product_terms($product->id, $attribute['name']); 

        } else { 

         $formatted_attributes[$attribute_label] = $attribute['value']; 
        } 

       } 
      } 


      print_r($formatted_attributes); 
+0

Dieser Code funktioniert für mich, aber ich bekomme alle vorhandenen Attributwerte in einer Zeile. Wie kann jeder Attributwert in jedem Tag zurückgemeldet werden? – Kristis

0

Die Lösung für diese Frage vorgesehen ist für 2.1, sollten Sie diesen Code aktualisieren 3 in WooCommerce arbeiten.0, sonst ein großes Protokoll wird für

+0

sollten Sie die Lösung bereitstellen oder diese zur vorherigen Antwort kommentieren, da Ihre Antwort dem Thema keinen Mehrwert verleiht. – bokorben

0

Verwenden Sie den folgenden Code deprecating werden generieren alle Attribute mit Details

global $wpdb; 

    $attribute_taxonomies = $wpdb->get_results("SELECT * FROM " . $wpdb->prefix . "woocommerce_attribute_taxonomies WHERE attribute_name != '' ORDER BY attribute_name ASC;"); 
    set_transient('wc_attribute_taxonomies', $attribute_taxonomies); 

    $attribute_taxonomies = array_filter($attribute_taxonomies ) ; 

    prin_r($attribute_taxonomies); 
Verwandte Themen