【问题标题】:How to print a custom checkout field into email order details如何将自定义结帐字段打印到电子邮件订单详细信息中
【发布时间】:2020-06-25 07:42:28
【问题描述】:

我想将我的自定义结帐字段打印到所有电子邮件通知中,如下面的屏幕截图所示。


目前的效果

  • 将该字段添加到结帐
  • 处理结帐
  • 使用字段值更新订单元
  • 在订单编辑页面显示字段值

我的问题

  • 如何将自定义结帐字段添加到电子邮件订单详细信息中(如屏幕截图所示)

这是我目前使用的代码,如何进一步调整?

/* Add the field to the checkout */
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );

function my_custom_checkout_field( $checkout ) {

    echo '<div id="my_custom_checkout_field"><h3>' . __('Imię i nazwisko osoby obdarowanej') . '</h3>';

    woocommerce_form_field( 'my_field_name', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'label'         => __('Podaj imię i nazwisko osoby obdarowanej'),
        'placeholder'   => __(''),
        'required'  => true,
        ), $checkout->get_value( 'my_field_name' ));

    echo '</div>';

}

/* Process the checkout */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['my_field_name'] )
        wc_add_notice( __( '<strong>Imię i nazwisko osoby obdarowanej</strong> jest wymaganym polem' ), 'error' );
}

/* 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_name'] ) ) {
        update_post_meta( $order_id, 'My Field', sanitize_text_field( $_POST['my_field_name'] ) );
    }
}

/* Display field value on the order edit page */
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('Imie i nazwisko obdarowanej').':</strong> ' . get_post_meta( $order->id, 'My Field', true ) . '</p>';
}

【问题讨论】:

    标签: php wordpress woocommerce checkout email-notifications


    【解决方案1】:

    第 1 步)将您的代码更改为此

    /* Add the field to the checkout */
    add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );
    function my_custom_checkout_field( $checkout ) {
    
        echo '<div id="my_custom_checkout_field"><h3>' . __('Imię i nazwisko osoby obdarowanej') . '</h3>';
    
        woocommerce_form_field( 'my_field_name', array(
            'type'          => 'text',
            'class'         => array('my-field-class form-row-wide'),
            'label'         => __('Podaj imię i nazwisko osoby obdarowanej'),
            'placeholder'   => __(''),
            'required'  => true,
            ), $checkout->get_value( 'my_field_name' ));
    
        echo '</div>';
    }
    
    /* Process the checkout */
    add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
    function my_custom_checkout_field_process() {
        // Check if set, if its not set add an error.
        if ( ! $_POST['my_field_name'] )
            wc_add_notice( __( '<strong>Imię i nazwisko osoby obdarowanej</strong> jest wymaganym polem' ), 'error' );
    }
    
    /* Update the order meta with field value */
    add_action( 'woocommerce_checkout_create_order', 'my_custom_checkout_field_create_order', 10, 2 );
    function my_custom_checkout_field_create_order( $order, $data ) {   
        if ( ! empty( $_POST['my_field_name'] ) ) {
            $order->update_meta_data( '_my_field', sanitize_text_field( $_POST['my_field_name'] ) ); // Order meta data
        }
    }
    
    /* Display field value on the order edit page */
    add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
    function my_custom_checkout_field_display_admin_order_meta($order) {
        // Get meta
        $my_field = $order->get_meta( '_my_field' );
    
        echo '<p><strong>'.__('Imie i nazwisko obdarowanej').':</strong> ' . $my_field . '</p>';
    }
    

    步骤 2) 覆盖以下模板文件

    https://github.com/woocommerce/woocommerce/blob/3.8.0/templates/emails/email-order-details.php

    这个模板可以通过复制到 yourtheme/woocommerce/emails/email-order-details.php.

    添加以下代码行号84

    $my_field = $order->get_meta( '_my_field' );
    if ( isset( $my_field ) ) {
        ?>
        <tr>
            <th class="td" scope="row" colspan="2" style="text-align:<?php echo esc_attr( $text_align ); ?>;"><?php echo 'Imie i nazwisko obdarowanej:'; ?></th>
            <td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>;"><?php echo $my_field; ?></td>
        </tr>               
        <?php
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-27
      • 2015-12-10
      • 1970-01-01
      • 2019-10-23
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      相关资源
      最近更新 更多