获取要在 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 版本上)…
与订单相关的主题:
我使用 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 版本上)…
与订单相关的主题: