Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress woocommerce将自定义签出字段添加到电子邮件_Wordpress_Email_Woocommerce - Fatal编程技术网

Wordpress woocommerce将自定义签出字段添加到电子邮件

Wordpress woocommerce将自定义签出字段添加到电子邮件,wordpress,email,woocommerce,Wordpress,Email,Woocommerce,Wordpress-Woocommerce 我想做什么: 在签出页面中添加一些自定义字段 另外,在收到新订单时,将这些字段的值发送到我的电子邮件 这就是我所做的,但失败了: 我在这里遵循教程: 一切正常,我成功创建了字段,它们出现在订单设置页面: add_action( 'woocommerce_after_order_notes', 'my_checkout_fields' ); function my_checkout_fields( $checkout ) { echo '<

Wordpress-Woocommerce

我想做什么:

  • 在签出页面中添加一些自定义字段
  • 另外,在收到新订单时,将这些字段的值发送到我的电子邮件
这就是我所做的,但失败了:

我在这里遵循教程:

一切正常,我成功创建了字段,它们出现在订单设置页面:

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'] ) );
}
}
}
但是,自定义字段不会出现在发送的电子邮件中

我还尝试通过在电子邮件模板文件中执行以下操作来测试它:

<p><?php echo $order->my_field; ?></p>

电子邮件中没有打印任何内容


解决方案。提前感谢。

您应该使用“我的字段”而不是“我的字段”。使用此键保存自定义字段时。这肯定会解决您的问题。

我在打印结果时遇到了类似的问题,直到我在“我的字段”之前添加了下划线

所以使用

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;    
}

请发布您的代码,以便轻松告知问题检查此链接中代码上方指定的注释。感谢回复。我还在上面的结帐页面上发布了创建字段的代码@WisdmLabs是的,这是我遵循的指令,但它不起作用。我认为我唯一可能做错的事情是“跟踪代码”,但在我的例子中不是“我的字段”吗?你应该使用“我的字段”而不是“我的字段”。使用此键保存自定义字段时。这肯定会解决您的问题。@WisdmLabs谢谢,这很有效。
/*----------------------------------------------
    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;    
}