如果您想在订单元数据中添加自定义字段,将该字段的值与订单确认邮件一起发送,并在后端的订单详细信息和编辑屏幕中额外显示,您可以使用以下代码.有多个步骤要做。
- 创建一个新字段以显示在 WooCommerce Checkout 中。如果您想确保输入了一个值,请根据需要进行设置。为此,我们使用
'woocommerce_after_checkout_billing_form'。 (只是旁注:如果您有其他目的,也可以使用隐藏字段和给定值)
- 使用
'woocommerce_checkout_update_order_meta'保存订单元数据中的值
- 使用
'woocommerce_email_order_meta_keys' 将值添加到完成订单后发送的电子邮件中
- 使用
'woocommerce_order_details_after_order_table'在后端的订单详细信息屏幕中显示该值,对于订单编辑屏幕'woocommerce_admin_order_data_after_billing_address',这会将其放置在帐单地址下方。注意:该值不会显示(但仍会保存在数据库中),如果订单是在后端下的,则仅适用于在前端下的订单(现在将超出范围)。
在我的代码示例中,我执行此步骤是为了添加一个增值税 ID 字段,该字段在欧洲对于企业对企业的交易很重要。增值税 ID 也会添加到电子邮件和后端屏幕中。
您可以根据需要调整名称(vat_number 或“mrank”前缀),但请记住保持一致。
/**
* VAT Number in WooCommerce Checkout
*/
function mrank_vat_field( $checkout ) {
echo '<div id="mrank_vat_field">';
woocommerce_form_field( 'vat_number', array(
'type' => 'text',
'class' => array( 'vat-number-field form-row-wide') ,
'label' => __( 'VAT-ID' ),
'placeholder' => __( 'Enter number' ),
'description' => __( 'Please enter your VAT-ID' ),
'required' => true,
), $checkout->get_value( 'vat_number' ));
echo '</div>';
}
add_action( 'woocommerce_after_checkout_billing_form', 'mrank_vat_field' );
/**
* Save VAT Number in the order meta
*/
function mrank_checkout_vat_number_update_order_meta( $order_id ) {
if ( ! empty( $_POST['vat_number'] ) ) {
update_post_meta( $order_id, '_vat_number', sanitize_text_field( $_POST['vat_number'] ) );
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'mrank_checkout_vat_number_update_order_meta' );
/**
* Display VAT Number in order details screen
*/
function mrank_vat_number_display_order_details($order){
echo '<p><strong>'.__('VAT-ID').':</strong> ' . get_post_meta( $order->get_id(), '_vat_number', true ) . '</p>';
}
add_action( 'woocommerce_order_details_after_order_table', 'mrank_vat_number_display_order_details', 10, 1 );
/**
* Display VAT Number in order edit screen
*/
function mrank_vat_number_display_admin_order_meta( $order ) {
echo '<p><strong>' . __( 'VAT-ID', 'woocommerce' ) . ':</strong> ' . get_post_meta( $order->get_id(), '_vat_number', true ) . '</p>';
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'mrank_vat_number_display_admin_order_meta', 10, 1 );
/**
* VAT Number in emails
*/
function mrank_vat_number_display_email( $keys ) {
$keys['VAT-ID'] = '_vat_number';
return $keys;
}
add_filter( 'woocommerce_email_order_meta_keys', 'mrank_vat_number_display_email' );