我使用 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订单详细信息