获取要在 Woocommerce 电子邮件通知中显示的自定义字段值

Get a custom fields value to be displayed in Woocommerce email notifications

我使用 WC Field 工厂生成了一些自定义字段,包括一个名为 "message_to_recipient." 的文本框,我想将其传递给发出的电子邮件。

在我的 functions.php 中,我正在使用这个:

add_action( 'woocommerce_email_before_order_table', 'add_order_email_instructions', 10, 2 );

function add_order_email_instructions( $order, $sent_to_admin ) {

 $custom_message = get_post_meta( $order->ID, "message_to_recipient", true );

 if ( ! $sent_to_admin ) {

 echo '<h2>You received a gift Card from '.$order->billing_first_name .' '.$order->billing_last_name.'</h2>';
 echo '<p><strong>Message:</strong> ' . $custom_message. '</p>'; 

}

第一个 echo,对 $order->billing_first_name 的调用等工作正常。但是第二个没有。

使用了 WC Field Factory,我只是没有使用正确的名称,还是这是从订单中获取元数据的错误钩子?

要从 WC_Order 对象获取订单 ID,因为 WooCommerce 版本 3+ 您应该需要使用 get_id() 方法。

此外,您最好使用 WC_Order 方法,如 get_billing_last_name()get_billing_last_name() 代替...

所以你的代码应该是:

add_action( 'woocommerce_email_before_order_table', 'add_order_email_instructions', 10, 2 );
function add_order_email_instructions( $order, $sent_to_admin ) {
    if ( ! $sent_to_admin ) {
        // compatibility with WC +3
        $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
        $first_name = method_exists( $order, 'get_billing_first_name' ) ? $order->get_billing_first_name() : $order->billing_first_name;
        $last_name = method_exists( $order, 'get_billing_last_name' ) ? $order->get_billing_last_name() : $order->billing_last_name;

        $custom_message = get_post_meta( $order_id , "message_to_recipient", true );

        echo '<h2>You received a gift Card from '. $first_name .' '. $last_name .'</h2>';

        if( ! empty($custom_message) )
            echo '<p><strong>Message:</strong> ' . $custom_message. '</p>'; 
    } 
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

这应该对你有用 (在 WC 2.5+ 之后的任何 WC 版本上)


与订单相关的主题: