Obtenez des attributs de produit personnalisés dans Woocommerce

j'essaie d'obtenir des valeurs d'attributs personnalisés pour les produits, mais je ne le fais malheureusement pas.

j'ai essayé de faire:

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

Et je suis de ces données brutes:

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

je sais qu'il y a une valeur parce qu'il montre dans la section attribut, mais je ne peux pas trouver un moyen de faire afficher dans mon code personnalisé.

45
demandé sur LoicTheAztec 2012-11-14 11:55:14

9 réponses

Modifié:woocommerce_get_product_terms est obsolète Thème depuis la version 3

Aller avec le suivant @datafeedr a écrit dans sa réponse:

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

ou encore plus compact:

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

réponse Originale à cette question:

$result = array_shift(woocommerce_get_product_terms($product->id, 'pa_koostis', 'names'));
70
répondu Nick 2018-04-23 01:34:14

Vous pouvez obtenir la valeur de l'attribut avec le code ci-dessous:

$pa_koostis_value = get_post_meta($product->id, 'pa_koostis', true);
13
répondu terrytsang 2012-11-14 13:15:07

woocommerce_get_product_terms() est maintenant obsolète.

Utiliser wc_get_product_terms() à la place.

Exemple:

global $product;
$koostis = array_shift( wc_get_product_terms( $product->id, 'pa_koostis', array( 'fields' => 'names' ) ) );
13
répondu datafeedr 2014-02-25 16:58:44

la Plupart des mises à jour:

$product->get_attribute( 'your_attr' );

Vous aurez besoin de définir $product si il n'est pas sur la page.

9
répondu Artipixel 2014-09-21 15:20:32

mise à jour pour 2018. Vous pouvez utiliser:

global $product;
echo wc_display_product_attributes( $product );

Pour personnaliser la sortie, copie plugins/woocommerce/templates/single-product/product-attributes.phpthemes/theme-child/woocommerce/single-product/product-attributes.php et de le modifier.

9
répondu david_nash 2018-08-20 13:20:04

Essayez ceci pour obtenir un tableau de l'attribut nom => valeur de l'attribut(s):

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;

c'est peu inefficace mais fait l'affaire.

8
répondu airdrumz 2015-07-16 10:32:24

La réponse à "Aucune idée pour obtenir tous les attributs à la fois?"la question, c'est juste pour appeler la fonction avec seulement l'id du produit:

$array=get_post_meta($product->id);

la touche est optionnelle, voir http://codex.wordpress.org/Function_Reference/get_post_meta

1
répondu jere_hr 2013-11-27 13:24:26

Vous obtiendrez des attributs comme tableau dans "$ formatted_attributes"

          $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);
1
répondu Shemeer M Ali 2016-06-21 06:38:27

Utilisez le code ci-dessous pour obtenir tous les attributs avec les détails

    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);
0
répondu Nishad Up 2017-08-21 06:15:12