我需要在处理订单电子邮件中添加自定义数据,但是数据总是在发送电子邮件后更新,如下所示:
订单状态更改==>发送电子邮件==>在自定义表格(插件)上插入数据
我需要的是:
订单状态更改==>在自定义表(插件)上插入数据==>发送电子邮件。
我已经检查了,这是通过以下钩子函数完成的:
add_action('woocommerce_order_status_changed', 'fun_order_status_changed', 10, 4);
function fun_order_status_changed($order_id, $from_status, $to_status, $order){
// Some code
// Then insert to database
}
我该怎么办或需要修改哪些文件,以便首先将插入内容保存在数据库中,然后发送电子邮件?
编辑1
答案 0 :(得分:0)
您可以尝试将woocommerce_order_status_pending_to_processing_notification
动作挂钩与lower priority
一起使用,例如5。这样,它将在发送邮件之前得到处理。
答案 1 :(得分:0)
如果要在订单元数据中添加自定义字段,将该字段的值与订单确认邮件一起发送,并在后端的订单详细信息和编辑屏幕中另外显示,则可以使用以下代码。有多个步骤需要完成。
'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'
,将值显示在帐单地址下方。注意:该值不会显示(但仍会保存在数据库中),如果订单是在后端进行的,则仅适用于放置在前端的订单(现在将超出范围)。在我的代码示例中,我执行了以下步骤来添加VAT 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' );