在 Woocommerce 中插入自定义字段值作为电子邮件订单总计 table 的新行

Insert a custom field value as a new row on email order totals table in Woocommerce

我正在帮助我妈妈为她在丹麦的商店创建网站。 一切顺利,但现在我遇到了一个问题。 我需要能够在订单完成电子邮件中创建一个自定义字段,显示跟踪和跟踪编号,我已插入管理订单页面。到目前为止我所做的一切都没有奏效,所以我寻求你的帮助。

我添加了一个名为 Track & Trace Pakkenr. 的自定义字段(参见屏幕截图 1) 但问题是在订单完成电子邮件中获取此信息,正在发货(forsendelse 丹麦语,请参见屏幕截图 2)

我也是编码方面的完全初学者,所以如果你们中的任何人可以提供任何帮助或建议,请确保万无一失。

这是screenshot 1 and screenshot 2

您可以在订单邮件中添加自定义字段,您需要使用字段键,代码中有meta_key.

/**
 * Add a custom field (in an order) to the emails
 */
add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 );

function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
    $fields['meta_key'] = array(
        'label' => __( 'Label' ),
        'value' => get_post_meta( $order->id, 'meta_key', true ),
    );
    return $fields;
}

参考:https://docs.woocommerce.com/document/add-a-custom-field-in-an-order-to-the-emails/

下面是将自定义元字段添加到订单电子邮件的简单但实用的示例

add_filter( 'woocommerce_email_order_meta_fields', 'woocommerce_email_order_meta_fields_func', 10, 3 );

function woocommerce_email_order_meta_fields_func( $fields, $sent_to_admin, $order ) {

    $fields['Track_Field'] = array(
        'label' => __( 'Track', 'woocommerce' ),
        'value' => wptexturize( get_post_meta( $order->id, 'Track_Field', true ) )
    );


    //... more meta fields goes here

    return $fields;
}

在订单后的电子邮件中 ​​table:

add_action( 'woocommerce_email_after_order_table', 'woocommerce_email_after_order_table_func' );
function woocommerce_email_after_order_table_func( $order ) {
    ?>

    <h3>Track</h3>
    <table>
        <tr>
            <td>Track Fields </td>
            <td><?php echo wptexturize( get_post_meta( $order->id, 'Track_Field', true ) ); ?></td>
        </tr>

        <!--additional custom meta and HTML code goes here-->
    </table>

    <?php
}

如需更多帮助,请参阅此 link:Click here

要在电子邮件通知的订单总计 table 中显示此订单自定义字段值,请使用以下内容:

add_filter( 'woocommerce_get_order_item_totals', 'insert_custom_line_order_item_totals', 10, 3 );
function insert_custom_line_order_item_totals( $total_rows, $order, $tax_display ){
    // Only on emails notifications
    if( is_wc_endpoint_url() ) return $total_rows; // Exit

    $tracking_label = 'Track & Trace Pakkenr.'; // The tracking label name
    $tracking_value = $order->get_meta( $tracking_label ); // Get the tracking value (custom field).

    if( empty($tracking_value) ) return $total_rows; // Exit

    $new_total_rows  = array(); // Initializing

    // Loop through total rows
    foreach( $total_rows as $key => $value ){
        if( 'payment_method' == $key && ! empty($tracking_value) ) {
            $new_total_rows['tracking_parcel'] = array(
                'label' => $tracking_label,
                'value' => $tracking_value,
            );
        }
        $new_total_rows[$key] = $total_rows[$key];
    }

    return sizeof($new_total_rows) > 0 ? $new_total_rows : $total_rows;
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。

你会得到类似的东西:

来自这里: