2016-08-30 4 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

관련 문제