Woocommerce如何将自定义结账字段添加到电子邮件?

5

WordPress - WooCommerce

我想做什么:

  • 在结账页面中添加一些自定义字段。
  • 同时,在收到新订单时将这些字段的值发送到我的电子邮件。

我尝试过但失败了:

我按照这里的教程进行操作:http://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/

一切都很顺利,我成功地创建了这些字段,并且它们出现在订单设置页面中:

add_action( 'woocommerce_after_order_notes', 'my_checkout_fields' );

function my_checkout_fields( $checkout ) {

echo '<div id="my_checkout_fields"><h2>' . __('My Heading') . '</h2>';

woocommerce_form_field( 'my_field', array(
    'type'      => 'select',
    'options'   => array(
        'option_1' => 'My Option 1',
        'option_2' => 'My Option 2'
    ),
    'clear'     => false,
    'class'         => array('form-row-wide'),
    'label'         => __('Whatever')
    ), $checkout->get_value( 'my_field' ));

echo '</div>';

}

/**
 * Update the order meta with field value
 */
add_action( 'woocommerce_checkout_update_order_meta','my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST['my_field'] ) ) {
    update_post_meta( $order_id, 'My Field', sanitize_text_field( $_POST['my_field'] ) );
}
}
}

然后,我尝试按照教程中“第四课”一节所示将它们添加到电子邮件订单元数据中:

add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');
function my_custom_checkout_field_order_meta_keys( $keys ) {
    $keys[] = 'my_field';
    return $keys;
}

但是,自定义字段不会显示在发送的电子邮件中。
我还尝试通过在电子邮件模板文件中执行以下操作来测试它:
<p><?php echo $order->my_field; ?></p>

在电子邮件中没有任何内容被打印出来。请提供解决方案。谢谢您的帮助。

请发布您的代码,这样可以更容易地确定问题。 - LSN
请查看此链接中代码上方指定的注释:https://gist.github.com/mikejolley/1547491 - Domain
感谢回复。我也发布了我的代码,用于在结账页面上创建字段。@WisdmLabs 是的,那是我遵循的指示,但它没有起作用。我认为我可能做错了唯一的事情就是“跟踪代码”,但在我的情况下不是“my_field”吗? - Wei
你应该使用'My Field'而不是my_field。因为你已经用这个键保存了自定义字段。这肯定会解决你的问题。 - Domain
@WisdmLabs 谢谢,好用。 - Wei
2个回答

5
你应该使用'My Field'而不是my_field。因为你已经使用这个键保存了自定义字段。这一定会解决你的问题。

0

我之前也遇到了打印结果的类似问题,直到我在“my_field”前面加了一个下划线才解决了。

所以请使用

add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');
function my_custom_checkout_field_order_meta_keys( $keys ) {
    $keys[] = '_my_field';
    return $keys;
}

看起来当WooCommerce在查询元数据以在管理部分中使用时,会添加下划线。因此,对于您创建的字段

    add_filter( 'woocommerce_checkout_fields' , 'brown_remove_billing_postcode_checkout' );

function brown_remove_billing_postcode_checkout( $fields ) {

    // Add New Fields
    $fields['billing']['billing_delivery_date'] = array(
        'label'     => __('Delivery Date', 'woocommerce'),
        'placeholder'   => _x('yyyy-mm-dd', 'placeholder', 'woocommerce'),
        'required'  => true,
        'class'     => array('form-row-wide'),
        'clear'     => true,
        'autocomplete' => false
     );

//Update the order meta with field value. Don't miss the underscore before _b
$fields['billing_delivery_date'] = get_post_meta( $order->id, '_billing_delivery_date', true );

    return $fields;
}

你需要在functions.php文件中添加代码

/*----------------------------------------------
    Add Delivery Date Field to the order emails
-------------------------------------------------*/
add_filter('woocommerce_email_order_meta_keys', 'my_woocommerce_email_order_meta_keys');

function my_woocommerce_email_order_meta_keys( $keys ) {
    $keys['Delivery Date'] = '_billing_delivery_date';
    return $keys;    
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接