2012-11-14 12 views
34

से उत्पादों के कस्टम विशेषताओं को कैसे प्राप्त करें I उत्पादों को कस्टम विशेषता मान प्राप्त करने का प्रयास कर रहा हूं लेकिन मैं ऐसा करने में बुरी तरह विफल रहा हूं। मैंWooCommerce

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

की कोशिश की लेकिन मैं

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

हो रही है मैं जानता हूँ कि एक मूल्य है कि वहाँ है, क्योंकि यह विशेषता अनुभाग में यह पता चलता है, लेकिन मैं अभी नहीं कर सकते यह दिखाने के लिए पाने के लिए एक रास्ता खोजने मेरा कस्टम कोड

उत्तर

58

: 2.1 woocommerce_get_product_terms के रूप में

हटा दिया गया है निम्नलिखित के साथ जाने के रूप में datafeedr hes में लिखा का जवाब:

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

या

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

मूल जवाब:

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

अपने जवाब के लिए धन्यवाद, यह वास्तव में मददगार था। –

+1

आप इस https://stackoverflow.com/questions/47766480/woocommerce-custom-shop-page-with-infinte-load –

12

आप कर सकते हैं नीचे कोड के साथ विशेषता के लिए एक मान मिलता है: संपादित

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

सभी प्राप्त करने के लिए किसी भी विचार एक ही बार में विशेषताओं के साथ सभी विशेषताओं पाने के लिए उत्पन्न किया जाएगा? – ravisoni

+2

@ravisoni 'get_post_meta ($ prodict-> आईडी, '_product_attributes');' – EHerman

2

का जवाब "सभी प्राप्त करने के लिए किसी भी विचार एक ही बार में जिम्मेदार बताते हैं?"

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

कुंजी वैकल्पिक है, को देखने के http://codex.wordpress.org/Function_Reference/get_post_meta

10

woocommerce_get_product_terms() अब पदावनत किया गया है: सवाल सिर्फ केवल उत्पाद आईडी के साथ समारोह कॉल करने के लिए है।

इसके बजाय wc_get_product_terms() का उपयोग करें।

उदाहरण:

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

जाँच कृपया सकता है यह सही है। मेरा मानना ​​है कि संस्करण 2.1 में सब कुछ नरम-बहिष्कृत था। – helgatheviking

+0

मुझे मिल रहा है -> नोटिस: संदर्भ द्वारा केवल चर पारित किया जाना चाहिए। Woocommerce संस्करण 3.2.6। कोड ---> $ date = array_shift (wc_get_product_terms ($ product-> get_id(), 'pa_date', सरणी ('फ़ील्ड' => 'नाम'))); क्या गलत हो सकता है? मैं इसे हल नहीं कर सकता। मैं GetType ($ तारीख) की 'अशक्त' – Kristis

8

अधिकांश अद्यतन:

$product->get_attribute('your_attr'); 

आप अगर यह पृष्ठ में नहीं हैं $product परिभाषित करने के लिए की आवश्यकता होगी।

8

विशेषता नाम => विशेषता मान (रों) की एक सरणी प्राप्त करने के लिए इस प्रयास करें:

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; 

यह थोड़ा अक्षम है, लेकिन काम कर देता है। 2016 के लिए

9

अद्यतन आप उपयोग कर सकते हैं:

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

उत्पादन को अनुकूलित करने के लिए, themes/theme-child/woocommerce/single-product/product-attributes.php करने के लिए plugins/woocommerce/templates/single-product/product-attributes.php कॉपी और संशोधित।

+1

इसकी वास्तव में मेरे लिए काम कर .. धन्यवाद डेविड –

1

आप "$ 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); 
+0

इस कोड मेरे लिए काम करता है, लेकिन मैं एक पंक्ति में सभी मौजूदा विशेषता मान मिलता है। प्रत्येक टैग में प्रत्येक विशेषता मान को प्रतिबिंबित करने के लिए कैसे? – Kristis

0

समाधान इस प्रश्न के लिए प्रदान की जाती में सरणी के रूप में विशेषताओं मिलेगा 2.1 के लिए, आप woocommerce 3 में काम करने के लिए इस कोड को अद्यतन करना चाहिए है।0, अन्यथा एक विशाल लॉग का बहिष्कार कर

कोड नीचे
+0

आपको समाधान प्रदान करना चाहिए या पिछले उत्तर में टिप्पणी करना चाहिए, क्योंकि आपका उत्तर विषय में कोई मूल्य नहीं जोड़ता है। – bokorben

0

विवरणों का उपयोग करें

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); 
संबंधित मुद्दे