2013-03-08 75 views
2

我在woocommerce 3個自定義字段:Woocommerce自定義字段不節能

物質的參考號,發票號和soliciter處理的情況下(代碼接下來,如果你不想看到它,只需向下滾動,它不是那麼重要)

add_action('woocommerce_after_order_notes', 'matter_reference_number_func'); 

function matter_reference_number_func($checkout) { 

    echo '<div id="matter_ref"><h3>'.__('Matter reference number').'</h3>'; 

    woocommerce_form_field('matter_reference_number', array(
     'type'   => 'text', 
     'class'   => array('my-field-class form-row-wide'), 
     'placeholder'  => __('Matter reference number'), 
     ), $checkout->get_value('matter_ref_num')); 

    echo '</div>'; 

} 

add_action('woocommerce_after_order_notes', 'invoice_number_func'); 

function invoice_number_func($checkout) { 

    echo '<div id="inv_num"><h3>'.__('Invoice number').'</h3>'; 

    woocommerce_form_field('invoice_number', array(
     'type'   => 'text', 
     'class'   => array('my-field-class form-row-wide'), 
     'placeholder'  => __('Invoice number'), 
     ), $checkout->get_value('invoice_num')); 

    echo '</div>'; 

} 

add_action('woocommerce_after_order_notes', 'sol_deal_func'); 

function sol_deal_func($checkout) { 

    echo '<div id="sol_deal"><h3>'.__('Solicitor dealing with matter').'</h3>'; 

    woocommerce_form_field('matter_reference_number', array(
     'type'   => 'text', 
     'class'   => array('my-field-class form-row-wide'), 
     'placeholder'  => __('Solicitor dealing with matter'), 
     ), $checkout->get_value('sol_deal')); 

    echo '</div>'; 

} 

但是現在,當我嘗試它們不會出現在電子郵件中的值保存到客戶端還是在管理,甚至在確認頁面。根據the docs這應該足以做到這一點;但它沒有。

/** 
* Update the order meta with field value 
**/ 
add_action('woocommerce_checkout_update_order_meta', 'matter_ref_num_checkout_field_update_order_meta'); 

function matter_ref_num_checkout_field_update_order_meta($order_id) { 
    if ($_POST['matter_ref_num']) update_post_meta($order_id, 'Matter Reference Number', esc_attr($_POST['matter_ref_num'])); 
} 

/** 
* Update the order meta with field value 
**/ 
add_action('woocommerce_checkout_update_order_meta', 'invoice_num_checkout_field_update_order_meta'); 

function invoice_num_checkout_field_update_order_meta($order_id) { 
    if ($_POST['invoice_num']) update_post_meta($order_id, 'Invoice Number', esc_attr($_POST['invoice_num'])); 
} 

/** 
* Update the order meta with field value 
**/ 
add_action('woocommerce_checkout_update_order_meta', 'sol_deal_checkout_field_update_order_meta'); 

function sol_deal_checkout_field_update_order_meta($order_id) { 
    if ($_POST['sol_deal']) update_post_meta($order_id, 'Solicitor Dealing With Matter', esc_attr($_POST['sol_deal'])); 
} 

回答

6

您正在使用掛鉤來更新帖子元(作爲帖子id的訂單ID)。如果你檢查你的數據庫,你應該能夠看到適當的post id元下的字段。

如果你想將它們添加到電子郵件,你需要使用另一個鉤子太:

woocommerce_email_order_meta_keys

下面是從woocommerce文件的引用:

/** 
* Add the field to order emails 
**/ 
add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys'); 

function my_custom_checkout_field_order_meta_keys($keys) { 
    $keys[] = 'My Field'; 
    return $keys; 
} 

你真的只需要每個動作使用一個鉤子並將代碼放在那裏,例如:

/** 
* Update the order meta with field value 
**/ 
add_action('woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta'); 

function custom_checkout_field_update_order_meta($order_id) { 
    if ($_POST['matter_ref_num']) update_post_meta($order_id, 'Matter Reference Number', esc_attr($_POST['matter_ref_num'])); 
    if ($_POST['invoice_num']) update_post_meta($order_id, 'Invoice Number', esc_attr($_POST['invoice_num'])); 
    if ($_POST['sol_deal']) update_post_meta($order_id, 'Solicitor Dealing With Matter', esc_attr($_POST['sol_deal'])); 
} 

希望這會有所幫助。