2016-05-21 6 views
1

Я использую Wordpress вместе с WooCommerce для своего магазина.
Я хочу вывести значение моего пользовательского поля в моей корзине и в подтверждение заказа по электронной почте.Показать значение поля в корзине в WooCommerce

Я создал настраиваемое поле в моей functions.php:

// Display Fields 
add_action('woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields'); 

// Save Fields 
add_action('woocommerce_process_product_meta', 'woo_add_custom_general_fields_save'); 

function woo_add_custom_general_fields() { 

    global $woocommerce, $post; 

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

// Input 
woocommerce_wp_text_input( 
    array( 
     'id'    => '_gram', 
     'label'    => __('somelabel', 'woocommerce'), 
     'placeholder'  => '', 
     'description'  => __('sometext', 'woocommerce'), 
     'type'    => 'number', 
     'custom_attributes' => array(
       'step' => 'any', 
       'min' => '0' 
      ) 
    ) 
); 

    echo '</div>'; 

} 

function woo_add_custom_general_fields_save($post_id){ 
    // Number Field 
    $woocommerce_number_field = $_POST['_gram']; 
    if(!empty($woocommerce_number_field)) 
     update_post_meta($post_id, '_gram', esc_attr($woocommerce_number_field)); 

} 

На моих страницах я использую:

get_post_meta(get_the_ID(), '_gram', true); 

Чтобы показать значение и что работа совершенный.

Теперь я хочу показать это же значение под названием продукта в моей корзине и в подтверждениях по электронной почте. Но я не могу понять, как это сделать.

Кто-нибудь знает, как это сделать?

+0

woocommerce cart работает на сессии, поэтому вам также необходимо сохранить это значение в корзине, а затем получить значение из сеанса тележки на странице корзины и выполнить следующий процесс. –

+0

Какой идентификатор вы получите там, пожалуйста, проверьте – Savan

ответ

1

Ну, это долгий процесс, вам нужно реализовать два фильтра: & одно действие для достижения этого.

Вот подробный article о том, как вы можете управлять пользовательские поля на продукт, корзину, проверки, порядок и электронная почта

Также есть plugin для этой точной цели наряду с множеством других опций, связанных с WooCommerce пользовательских полей ,

Это прямое решение для вашего вопроса.

/** 
* Here we are trying to add your custom data as Cart Line Item 
* SO that we can add this custom data on your cart, checkout, order and email later 
*/ 
function save_custom_data($cart_item_data, $product_id) { 
    $custom_data = get_post_meta($product_id, '_gram', true); 
    if($custom_data != null && $custom_data != "" ) { 
     $cart_item_data["gram"] = $custom_data; 
    } 
    return $cart_item_data; 
} 
add_filter('woocommerce_add_cart_item_data', 'save_custom_data', 10, 2); 

/** 
* Here we are trying to display that custom data on Cart Table & Checkout Order Review Table 
*/ 
function render_custom_data_on_cart_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["gram"])) { 
     $custom_items[] = array("name" => "Gram", "value" => $cart_item["gram"]); 
    } 
    return $custom_items; 
} 
add_filter('woocommerce_get_item_data', 'render_custom_data_on_cart_checkout', 10, 2); 

/** 
* We are adding that custom data (gram) as Order Item Meta, 
* which will be carried over to EMail as well 
*/ 
function save_custom_order_meta($item_id, $values, $cart_item_key) { 
    if(isset($values["gram"])) { 
     wc_add_order_item_meta($item_id, "Gram", $values["gram"]); 
    } 
} 
add_action('woocommerce_add_order_item_meta', 'save_custom_order_meta', 10, 3); 
+0

Функция работает. Знаете ли вы, как использовать/показать еще одно настраиваемое поле? – emf

+0

проверить это: https://wisdmlabs.com/blog/add-custom-data-woocommerce-order/ – Mostafa

Смежные вопросы