簡體   English   中英

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

然后,我嘗試將它們添加到電子郵件訂單元中,如本教程的“第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”之前添加下划線之前,我在打印結果時遇到了類似的麻煩。

所以用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM