wordpress - Wordpress 高级自定义字段 - 在订单页面中包含跟踪号
问题描述
我使用 ACF 将跟踪号发送给我的客户。我创建了一个字段,在其中手动添加了一个跟踪号,并在订单完成电子邮件中向客户发送了一条消息。这是代码:
//add tracking number for UPS into confirmation page
add_action ('woocommerce_email_before_order_table', 'acf_trackingnumberups', 20);
function acf_trackingnumberups( $order ) {
if (get_field('trackingnumberups', $order->get_id())) { // Only show if field is filled
?>
<h3>Your tracking number: <strong><?php the_field('trackingnumberups', $order->get_id()); ?></strong></h3>
<p>You may track your order with the number above, here: <a style="color: #0073aa;" href="https://www.ups.com/tracking/tracking.html">UPS Tracking</a> </p>
<?php
}
}
我们的流程有问题。
我希望能够 1) 添加跟踪代码,2) 将订单设置为完成和 3) 更新。
现在我必须 1) 添加跟踪代码,2) 更新,3) 设置订单以完成,4) 再次更新。
否则,将不会在订单完成电子邮件中获取自定义字段。
我试图删除这一行:
if (get_field('trackingnumberups', $order->get_id())) { // Only show if field is filled
它有效,但它在所有通知中都包含跟踪代码。
我已经登陆了一个插件,该插件将保存按钮添加到自定义字段并运行 Ajax 调用。
有没有办法可以使用 Ajax 保存页面?
解决方案
我找到了解决方案。
在将信息添加到订单电子邮件之前,我忘记保存从自定义字段注册的值。无需在字段下添加 Ajax 按钮。此外,不再支持该插件。
// save input from metabox
add_action( 'save_post', 'bdev_save_postnord_data_to_order', 10, 1 );
if ( ! function_exists( 'bdev_save_postnord_data_to_order' ) )
{
function bdev_save_postnord_data_to_order( $post_id ) {
if ( ! isset( $_POST[ 'postnord_meta_field_nonce' ] ) ) {
return $post_id;
}
$nonce = $_REQUEST[ 'postnord_meta_field_nonce' ];
if ( ! wp_verify_nonce( $nonce ) ) {
return $post_id;
}
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return $post_id;
}
if ( 'page' == $_POST[ 'post_type' ] ) {
if ( ! current_user_can( 'edit_page', $post_id ) ) {
return $post_id;
}
} else {
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return $post_id;
}
}
update_post_meta( $post_id, '_postnord_field_data', $_POST[ 'postnord_data_name' ] );
}
}