In Woocommerce versuche ich, benutzerdefinierte Produktattributwerte abzurufen, aber ich versage kläglich und erhalte nichts.
Also habe ich versucht:
global $woocommerce, $post, $product;
$res = get_post_meta($product->id);
print_r(unserialize($res['_product_attributes'][0]));
Und ich bekomme diese Rohdaten:
[pa_koostis] => Array
(
[name] => pa_koostis
[value] =>
[position] => 0
[is_visible] => 1
[is_variation] => 0
[is_taxonomy] => 1
)
Ich weiß, dass es einen Wert gibt, weil er im Attributabschnitt angezeigt wird, aber ich kann einfach keine Möglichkeit finden, ihn mit meinem benutzerdefinierten Code anzuzeigen.
Antworten:
Gehen Sie wie folgt vor, wie @datafeedr in seiner Antwort schrieb :
global $product; $koostis = array_shift( wc_get_product_terms( $product->id, 'pa_koostis', array( 'fields' => 'names' ) ) );
oder noch kompakter:
global $product; $koostis = $product->get_attribute( 'pa_koostis' );
Ursprüngliche Antwort:
$result = array_shift(woocommerce_get_product_terms($product->id, 'pa_koostis', 'names'));
quelle
Update für 2018. Sie können verwenden:
global $product; echo wc_display_product_attributes( $product );
Kopieren Sie
plugins/woocommerce/templates/single-product/product-attributes.php
diesethemes/theme-child/woocommerce/single-product/product-attributes.php
und ändern Sie sie, um die Ausgabe anzupassen .quelle
Sie können den Einzelwert für das Attribut mit dem folgenden Code erhalten:
$pa_koostis_value = get_post_meta($product->id, 'pa_koostis', true);
quelle
get_post_meta( $prodict->id , '_product_attributes' );
woocommerce_get_product_terms()
ist jetzt veraltet.Verwenden Sie
wc_get_product_terms()
stattdessen.Beispiel:
global $product; $koostis = array_shift( wc_get_product_terms( $product->id, 'pa_koostis', array( 'fields' => 'names' ) ) );
quelle
Am häufigsten aktualisiert:
$product->get_attribute( 'your_attr' );
Sie müssen definieren,
$product
ob es nicht auf der Seite ist.quelle
Versuchen Sie dies, um ein Array mit Attributnamen => Attributwerten 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, macht aber den Trick.
quelle
Die Antwort auf "Irgendeine Idee, alle Attribute auf einmal zu erhalten?" Frage ist nur, Funktion mit nur Produkt-ID aufzurufen:
$array=get_post_meta($product->id);
Schlüssel ist optional, siehe http://codex.wordpress.org/Function_Reference/get_post_meta
quelle
Obwohl @airdrumz-Lösungen funktionieren, werden Sie viele Fehler erhalten, wenn Sie direkt auf die ID zugreifen. Dies ist nicht gut für die zukünftige Kompatibilität.
Aber es hat mich dazu gebracht, das Objekt zu untersuchen und diesen OOP-Ansatz zu erstellen:
function myplug_get_prod_attrs() { // Enqueue scripts happens very early, global $product has not been created yet, neither has the post/loop global $product; $wc_attr_objs = $product->get_attributes(); $prod_attrs = []; foreach ($wc_attr_objs as $wc_attr => $wc_term_objs) { $prod_attrs[$wc_attr] = []; $wc_terms = $wc_term_objs->get_terms(); foreach ($wc_terms as $wc_term) { array_push($prod_attrs[$wc_attr], $wc_term->slug); } } return $prod_attrs; }
Bonus, wenn Sie die oben genannten Schritte frühzeitig ausführen, bevor das globale $ -Produktelement erstellt wird (z. B. während Enqueue-Skripten), können Sie es selbst erstellen mit:
$product = wc_get_product(get_queried_object_id());
quelle
Verwenden Sie den folgenden Code, um alle Attribute mit Details zu erhalten
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);
quelle