【问题标题】:woocommerce add custom checkout field to emailwoocommerce 将自定义结帐字段添加到电子邮件
【发布时间】:2015-10-08 00:51:13
【问题描述】:

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'] ) );
}
}
}

然后,我尝试将它们添加到电子邮件订单元中,如教程中的“第 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>

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

请解决。提前致谢。

【问题讨论】:

  • 请张贴您的代码,以便轻松解决问题
  • 检查此链接中代码上方指定的cmets..gist.github.com/mikejolley/1547491
  • 感谢您的回复。我还在上面的结帐页面上发布了用于创建字段的代码。 @WisdmLabs 是的,那是我遵循的指示,但它不起作用。我认为我可能做错的唯一一件事是“跟踪代码”,但就我而言,它不是“my_field”吗?
  • 您应该使用“我的字段”而不是 my_field。因为您已经使用此键保存了自定义字段。这肯定会解决你的问题。
  • @WisdmLabs 谢谢,这行得通。

标签: wordpress email woocommerce


【解决方案1】:

您应该使用“我的字段”而不是 my_field。因为您已经使用此键保存了自定义字段。这肯定会解决你的问题。

【讨论】:

    【解决方案2】:

    我在打印结果时遇到了类似的麻烦,直到我在“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;    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2021-07-27
      • 1970-01-01
      • 2022-01-03
      • 2021-12-11
      • 2019-04-01
      相关资源
      最近更新 更多