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



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

在我的函数中.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>'; 
}

第一个回声,呼叫$order->billing_first_name等工作正常。但第二个没有。

使用

WC现场工厂后,我只是没有使用正确的名称,还是这是从订单中获取元数据的错误钩子?

要从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>'; 
    } 
}

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

这现在应该适合您(在自 WC 2.5+ 以来的任何 WC 版本上)...


与订单相关的相关线程:如何获取WooCommerce订单详细信息

相关内容

  • 没有找到相关文章

最新更新