2013-03-08 83 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'])); 
} 

希望这会有所帮助。

相关问题