2016-08-30 12 views
5

मैंने निर्माण पृष्ठों के सामान्य सेटिंग्स टैब पर WooCommerce व्यवस्थापक में कस्टम फ़ील्ड बनाया है, निर्माण के लिए कुछ दिन डालने के लिए। मैं इस उत्पाद फ़ील्ड मान को प्रत्येक उत्पाद के नाम से ऊपर कार्ट और चेकआउट पृष्ठों पर दिखाना चाहता हूं।कार्ट में उत्पादित व्यवस्थापक उत्पाद पृष्ठ कस्टम फ़ील्ड और चेकआउट

यहाँ मेरी कोड है:

// Insert a Custom Admin Field 
function woo_add_custom_general_fields() { 

    echo '<div class="options_group">'; 

    woocommerce_wp_text_input(array( 
     'id'    => 'days_manufacture', 
     'label'    => __('Days for Manufacture', 'woocommerce'), 
     'placeholder'  => '', 
     'description'  => __('Insert here', 'woocommerce'), 
     'type'    => 'number', 
     'custom_attributes' => 
     array(
      'step' => 'any', 
      'min' => '1' 
     ) 
    )); 
    echo '</div>'; 
} 
add_action('woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields'); 


// Save field 
function woo_add_custom_general_fields_save($post_id){ 
    $woocommerce_number_field = $_POST['days_manufacture']; 
    if(!empty($woocommerce_number_field)) 
     update_post_meta($post_id, 'days_manufacture', esc_attr($woocommerce_number_field)); 
} 
add_action('woocommerce_process_product_meta', 'woo_add_custom_general_fields_save'); 


function save_days_field($cart_item_data, $product_id) { 
    if(isset($_REQUEST['days_manufacture'])) { 
     $cart_item_data[ 'days_manufacture' ] = get_post_meta($post->ID, 'days_manufacture',true); 

/* below statement make sure every add to cart action as unique line item */ 

    $cart_item_data['unique_key'] = md5(microtime().rand()); 
    } 
    return $cart_item_data; 
} 
add_action('woocommerce_add_cart_item_data', 'save_days_field', 10, 2); 


function render_meta_on_cart_and_checkout($cart_data, $cart_item = null) { 
    $custom_items = array(); 
    /* Woo 2.4.2 updates */ 
    if(!empty($cart_data)) { 
     $custom_items = $cart_data; 
    } 
    if(isset($cart_item['days_manufacture'])) { 
     $custom_items[] = array("name" => 'Days:', "value" => $cart_item['days_manufacture']); 
    } 
    return $custom_items; 
} 
add_filter('woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2); 

लेकिन इस रूप में मैं कार्ट और चेकआउट पृष्ठों पर कस्टम फ़ील्ड मान प्रदर्शित नहीं कर सकते काम नहीं कर रहा।

मैं इसे कैसे प्राप्त कर सकता हूं?

धन्यवाद

+0

बहुत बढ़िया है, यह पूरी तरह से काम किया। आप एक प्रतिभाशाली हैं। आपका बहुत बहुत धन्यवाद! एक और सवाल, अगर मुझे पहनने से पहले मुझे अपने उत्पाद की स्क्रीन पर मूल्य दिखाना होगा .get_post_meta अब और काम नहीं कर रहा है। –

उत्तर

3

मैं अपने कोड का परीक्षण किया और उस उत्पाद कस्टम फ़ील्ड कार्ट और चेकआउट पृष्ठों पर प्रदर्शित करने के लिए कुछ भागों को सही है।

// Insert a Custom Admin Field 
add_action('woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields'); 

function woo_add_custom_general_fields() { 

    echo '<div class="options_group">'; 

    woocommerce_wp_text_input(array(
     'id'    => 'days_manufacture', 
     'label'    => __('Days for Manufacture', 'woocommerce'), 
     'placeholder'  => '', 
     'description'  => __('Insert here', 'woocommerce'), 
     'type'    => 'number', 
     'custom_attributes' => array(
      'step' => 'any', 
      'min' => '1' 
     ), 
    )); 

    echo '</div>'; 
} 


// Save the field 
add_action('woocommerce_process_product_meta', 'woo_add_custom_general_fields_save'); 

function woo_add_custom_general_fields_save($post_id){ 
$woocommerce_number_field = $_POST['days_manufacture']; 
if(!empty($woocommerce_number_field)) 
    update_post_meta($post_id, 'days_manufacture', esc_attr($woocommerce_number_field)); 
} 


// Store custom field 
add_action('woocommerce_add_cart_item_data', 'save_days_field', 10, 2); 

function save_days_field($cart_item_data, $product_id) { 
    $special_item = get_post_meta($product_id , 'days_manufacture',true); 
    if(!empty($special_item)) { 
     $cart_item_data[ 'days_manufacture' ] = $special_item; 

     // below statement make sure every add to cart action as unique line item 
     $cart_item_data['unique_key'] = md5(microtime().rand()); 
     WC()->session->set('days_manufacture', $special_item); 
    } 
    return $cart_item_data; 
} 


// Render meta on cart and checkout 
add_filter('woocommerce_get_item_data', 'rendering_meta_field_on_cart_and_checkout', 10, 2); 

function rendering_meta_field_on_cart_and_checkout($cart_data, $cart_item) { 
    $custom_items = array(); 
    // Woo 2.4.2 updates 
    if(!empty($cart_data)) { 
     $custom_items = $cart_data; 
    } 
    if(isset($cart_item['days_manufacture'])) { 
     $custom_items[] = array("name" => __("Days", "woocommerce"), "value" => $cart_item['days_manufacture']); 
    } 
    return $custom_items; 
} 

जाहिर है, इस अपने सक्रिय बच्चा विषय (या विषय) की function.php फ़ाइल में चला जाता है या भी किसी भी प्लगइन फ़ाइल में:

यहाँ हूं कि सुधार के कोड है।

यह कोड परीक्षण और काम करता है।

संदर्भ: WooCommerce : Add custom Metabox to admin order page

संबंधित मुद्दे