【问题标题】:Display custom fields values in WooCommerce order and email notification在 WooCommerce 订单和电子邮件通知中显示自定义字段值
【发布时间】:2019-03-12 06:19:23
【问题描述】:

基于“Choosing a date and time after choosing the WooCommerce delivery method”答案代码,显示自定义取货字段和交货日期,以下代码在订单编辑页面上显示这些字段的交货数据。

这是我的代码:

// View fields in Edit Order Page
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_fields_order_meta', 10, 1 );
function my_custom_fields_order_meta($order){   

    $delivery_option = $order->get_meta('_delivery_option');

    if( $delivery_option == 'date' ) {
    $delivery_datetime = $order->get_meta('_delivery_datetime');

    echo '<p><strong>'.__('Delivery').':</strong> ' . get_post_meta( $order->id, '_delivery_option', true ) . '</p>';
    echo '<p><strong>'.__('Delivery Date').':</strong> ' . get_post_meta( $order->id, '_delivery_datetime', true ) . '</p>';
    }
}

很遗憾,只有客户选择的交货日期显示正确,单选按钮“尽快”的选项没有显示出来。

显然,我做错了什么。

我还想在感谢页面和电子邮件中显示这些字段值。

感谢任何帮助。

【问题讨论】:

    标签: php wordpress woocommerce checkout orders


    【解决方案1】:

    要在后端订单编辑页面中显示自定义字段值(如果它们保存在订单的数据库中),请使用以下内容:

    // View fields in Edit Order Page
    add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_custom_fields_value_admin_order', 10, 1 );
    function display_custom_fields_value_admin_order( $order ){
        // Display the delivery option
        if( $delivery_option =  $order->get_meta('_delivery_option') )
            echo '<p><strong>'.__('Delivery type').':</strong> ' . $delivery_option . '</p>';
    
        // Display the delivery date
        if( $delivery_datetime = $order->get_meta('_delivery_datetime') )
            echo '<p><strong>'.__('Delivery Date').':</strong> ' . $delivery_datetime . '</p>';
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。


    前端订单页面电子邮件通知的各处显示自定义字段值的最佳简洁方式是将它们显示在订单总计表中,就像使用过的付款一样方法:

    // Display the chosen delivery information
    add_filter( 'woocommerce_get_order_item_totals', 'chosen_delivery_item_order_totals', 10, 3 );
    function chosen_delivery_item_order_totals( $total_rows, $order, $tax_display ) {;
        $new_total_rows = [];
    
        // Loop through Order total lines
        foreach($total_rows as $key => $total ){
            // Get the chosen delivery values
            $delivery_option  = $order->get_meta('_delivery_option');
            $delivery_datetime = $order->get_meta('_delivery_datetime');
    
            // Display delivery information before payment method
            if( ! empty($delivery_option) && 'payment_method' === $key ){
                $label  = empty($delivery_datetime) ? __('Delivery') : __('Delivery Date');
                $value  = empty($delivery_datetime) ? __('AZAP', $domain) : $delivery_datetime;
    
                // Display 'Delivery method' line
                $new_total_rows['chosen_delivery'] = array( 'label' => $label,'value' => $value );
            }
            $new_total_rows[$key] = $total;
        }
    
        return $new_total_rows;
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。


    相关话题: Choosing a date and time after choosing the WooCommerce delivery method

    【讨论】:

    • 感谢您的回答!您的代码效果很好。在订单编辑页面上显示“交货类型:日期”。例如,如何更改“按时”一词?
    • @Dmitry 哪个词“到时候”?
    • 是否可以更改“日期”并设置“按某个时间”?
    • @Dmitry 所以你想要句子“在某个时间”而不是显示的日期......在管理员或前端+电子邮件中的哪个位置?
    • 所以在函数内最后一行的第一个代码 sn-p 中,您将 $delivery_datetime 替换为 __("by a certain time")
    猜你喜欢
    • 2020-09-09
    • 2021-05-05
    • 2018-08-31
    • 1970-01-01
    • 2020-12-07
    • 2020-11-05
    • 2019-09-22
    • 1970-01-01
    • 2021-03-29
    相关资源
    最近更新 更多