Soru Woocommerce'de özel ürün özellikleri alın


Ürünlere özel özellik değerleri almaya çalışıyorum ama bunu yapmakta zorlanıyorum.

Yapmaya çalıştım:

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

Ve bu ham verileri alıyorum:

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

Bunun bir özellik olduğunu biliyorum çünkü bu özellik bölümünde gösteriliyor ancak özel kodumda göstermesi için bir yol bulamıyorum.


44
2017-11-14 07:55


Menşei


Bu soru için verilen çözüm 2.1 içindir, bu kodu woocommerce 3.0'da çalışmak için güncellemeniz gerekir, aksi takdirde kullanımdan kaldırmaya yönelik büyük bir günlük oluşturulacaktır. - egmontt


Cevaplar:


Düzenlenen: The woocommerce_get_product_terms kullanımdan kaldırıldı Woocommerce sürüm 3'ten beri

Aşağıdakilerle git @datafeedr yazdı onun cevabında:

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

veya daha da kompakt:

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

Orijinal cevap:

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

68
2017-11-19 13:28



Cevabınız için teşekkür ederim, gerçekten yardımcı oldu. - Prafulla Kumar Sahu


Özniteliğin tek değerini aşağıdaki kodla alabilirsiniz:

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

13
2017-11-14 13:15



Tüm özellikleri bir seferde almak için bir fikrin var mı? - ravisoni
@ravisoni get_post_meta( $prodict->id , '_product_attributes' ); - EHerman


woocommerce_get_product_terms() şimdi kullanımdan kaldırıldı.

kullanım wc_get_product_terms() yerine.

Örnek:

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

13
2018-02-25 16:58



Doğru. Her şeyin 2.1 sürümünde yumuşak kullanımdan kaldırıldığına inanıyorum. - helgatheviking
Anladım -> Bildirim: Sadece değişkenler referans olarak iletilmelidir. Woocommerce sürümü 3.2.6. Kod ---> $ date = array_shift (wc_get_product_terms ($ product-> get_id (), 'pa_date', array ('fields' => 'names'))); Neyin yanlış olabilir? Çözemiyorum. Gettype ($ date) 'null'ı alıyorum - Kristis


En güncel:

$product->get_attribute( 'your_attr' );

Tanımlamanız gerekecek $product eğer sayfada değil.


9
2017-09-21 15:20





2016 için güncelleyin. Şunları kullanabilirsiniz:

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

Çıktıyı özelleştirmek için, kopyala plugins/woocommerce/templates/single-product/product-attributes.php için themes/theme-child/woocommerce/single-product/product-attributes.php ve bunu değiştir.


9
2018-04-29 06:54



Onun için gerçekten çalışıyor .. Teşekkürler David - Nishad Up


Bir özellik dizisi => özellik değeri (leri) almak için bunu deneyin:

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;

Bu biraz verimsiz ama hile yapar.


8
2017-07-16 10:32





"Tüm nitelikleri bir kerede alma fikri var mı?" soru sadece ürün kimliğiyle işlevi çağırmaktır:

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

anahtar isteğe bağlıdır http://codex.wordpress.org/Function_Reference/get_post_meta


2
2017-11-27 12:31





"$ Formatted_attributes" içinde öznitelikleri dizi olarak alacaksınız

          $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
2018-06-21 06:38



Bu kod benim için çalışır, ancak mevcut tüm özellik değerlerini bir satırda alırım. Her etikette her bir özellik değeri nasıl eklenir? - Kristis


Tüm öznitelikleri ayrıntılarla almak için aşağıdaki kodu kullanın

    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
2017-08-21 06:15