在订单电子邮件 woocommerce 中在帐单地址和送货地址中添加新添加的字段

时间:2021-03-08 17:00:32

标签: php wordpress woocommerce email-notifications

在 woocommerce 订单电子邮件中,我想自定义字段与帐单地址一起添加。这是我尝试过的。但它给出了错误。

add_filter('woocommerce_order_formatted_billing_address', array($this, 'woo_custom_order_formatted_billing_address'), 10, 2);
function woo_custom_order_formatted_billing_address( $address , $WC_Order ) {
    $address = array(
        'first_name'       => $WC_Order->billing_first_name . ' ' . $WC_Order->billing_last_name,
        'company'          => $WC_Order->billing_company,
        'address_1'        => $WC_Order->billing_address_1,
        'address_2'        => $WC_Order->billing_address_2,
        'city'             => $WC_Order->billing_city,
        'state'            => $WC_Order->billing_state,
        'area'             => $WC_Order->billing_area,
        'emirates'         => $WC_Order->billing_emirates,
        'nearest_landmark' => $WC_Order->billing_nearest_landmark,
        'country'          => $WC_Order->billing_country,
        'email'            => $WC_Order->billing_email,
        'phone'            => $WC_Order->billing_phone,
    );
    return $address;
}

任何人请帮忙。

1 个答案:

答案 0 :(得分:1)

您可以使用 woocommerce_order_get_formatted_billing_address 过滤器代替 woocommerce_order_formatted_billing_address 来确保更改帐单邮寄地址的最终结果。

对于 billing_areabilling_emiratesbilling_nearest_landmark 自定义字段,您需要获取它们各自的值作为订单 postmeta。

<块引用>

字段的排序也将应用于显示 后端前端中的帐单邮寄地址。

帐单电话帐单电子邮件字段添加在 /woocommerce/emails/email-addresses.php 电子邮件中的帐单邮寄地址 模板。所以没有必要添加它们,否则它们会显示双倍。

以下代码应该可以工作。

add_filter( 'woocommerce_order_get_formatted_billing_address', 'add_custom_field_billing_address', 10, 3 );
function add_custom_field_billing_address( $address, $raw_address, $order ) {

    $countries = new WC_Countries();
    // gets country and state codes
    $billing_country = $order->get_billing_country();
    $billing_state = $order->get_billing_state();
    // gets the full names of the country and state
    $full_country = ( isset( $countries->countries[ $billing_country ] ) ) ? $countries->countries[ $billing_country ] : $billing_country;
    $full_state = ( $billing_country && $billing_state && isset( $countries->states[ $billing_country ][ $billing_state ] ) ) ? $countries->states[ $billing_country ][ $billing_state ] : $billing_state;

    $data = array(
        $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(),
        $order->get_billing_company(),
        $order->get_billing_address_1(),
        $order->get_billing_address_2(),
        $order->get_billing_city(),
        $full_state,
        $order->get_meta( '_billing_area', true ),             // or $order->get_meta( 'billing_area', true )
        $order->get_meta( '_billing_emirates', true ),         // or $order->get_meta( 'billing_emirates', true )
        $order->get_meta( '_billing_nearest_landmark', true ), // or $order->get_meta( 'billing_nearest_landmark', true )
        $full_country,
    );

    // removes empty fields from the array
    $data = array_filter( $data );
    // create the billing address using the "<br/>" element as a separator
    $address = implode( '<br/>', $data );

    return $address;

}

代码已经过测试并且可以正常工作。

相关问题