woocommerce 将自定义结帐字段添加到电子邮件
woocommerce add custom checkout field to email
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'] ) );
}
}
}
然后,我尝试将它们添加到电子邮件订单元中,如教程中 'Lesson 4' 部分所示:
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>
电子邮件中未打印任何内容。
请解决。提前致谢。
您应该使用 'My Field' 而不是 my_field。当您使用此键保存自定义字段时。这绝对能解决你的问题。
我在打印结果时遇到了类似的麻烦,直到我在 '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;
}
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'] ) );
}
}
}
然后,我尝试将它们添加到电子邮件订单元中,如教程中 'Lesson 4' 部分所示:
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>
电子邮件中未打印任何内容。
请解决。提前致谢。
您应该使用 'My Field' 而不是 my_field。当您使用此键保存自定义字段时。这绝对能解决你的问题。
我在打印结果时遇到了类似的麻烦,直到我在 '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;
}