WooCommerce My Account 頁面預設地址格式是姓名、公司、地址 1 、地址 2 、城市、省/州、郵編和國家,更改這個格式需要先更新格式字串,然後獲取所有需要替換的資料,具體方法如下所示。
例如,只顯示姓名、電子郵箱和電話,程式碼放在主題的 functions.php 裡。 WooCommerce 2.1.9 下測試。
// 更新地址格式字串
// 預設是 {name}
{company}
{address_1}
{address_2}
{city}
{state}
{postcode}
{country}
add_filter( 'WooCommerce_localisation_address_formats', 'wc_my_account_address_formats' );
function wc_my_account_address_formats( $formats ){
$formats['default'] = "{name}
{email}
{phone}";
return $formats;
}
// 決定顯示哪些資料
// email 和 phone 是新新增的,需要用 get_user_meta 獲取值
add_filter( 'WooCommerce_my_account_my_address_formatted_address', 'wc_my_account_custom_formatted_address', 10, 3);
function wc_my_account_custom_formatted_address( $address, $customer_id, $name ){
$new_address['first_name'] = $address['first_name'];
$new_address['last_name'] = $address['last_name'];
// $name == billing - 賬單地址
// $name == shipping - 送貨地址
// 送貨地址沒有 email 和 phone 這兩項
if( $name == 'billing' ){
$new_address['email'] = get_user_meta( $customer_id, $name . '_email', true );
$new_address['phone'] = get_user_meta( $customer_id, $name . '_phone', true );
}
return $new_address;
}
// 告訴 wc 將 {email} 和 {phone} 替換成實際的值
add_filter( 'WooCommerce_formatted_address_replacements', 'wc_my_account_address_replacements', 10, 2 );
function wc_my_account_address_replacements( $replacements, $args ){
$replacements['{email}'] = $args['email'];
$replacements['{phone}'] = $args['phone'];
return $replacements;
}
my account 頁面地址部分的模版是 templates/myaccount/my-address.php
備註
第一段程式碼中的格式會根據國家不同而不同,使用時應弄清楚針對哪個國家的使用者,WooCommerce 具體預設了哪些國家的地址格式,看下面原始碼
public function get_address_formats() {
if (!$this->address_formats) :
// Common formats
$postcode_before_city = "{company}
{name}
{address_1}
{address_2}
{postcode} {city}
{country}";
// Define address formats
$this->address_formats = apply_filters('WooCommerce_localisation_address_formats', array(
'default' => "{name}
{company}
{address_1}
{address_2}
{city}
{state}
{postcode}
{country}",
'AU' => "{name}
{company}
{address_1}
{address_2}
{city} {state} {postcode}
{country}",
'AT' => $postcode_before_city,
'BE' => $postcode_before_city,
'CA' => "{company}
{name}
{address_1}
{address_2}
{city} {state} {postcode}
{country}",
'CH' => $postcode_before_city,
'CN' => "{country} {postcode}
{state}, {city}, {address_2}, {address_1}
{company}
{name}",
'CZ' => $postcode_before_city,
'DE' => $postcode_before_city,
'EE' => $postcode_before_city,
'FI' => $postcode_before_city,
'DK' => $postcode_before_city,
'FR' => "{company}
{name}
{address_1}
{address_2}
{postcode} {city_upper}
{country}",
'HK' => "{company}
{first_name} {last_name_upper}
{address_1}
{address_2}
{city_upper}
{state_upper}
{country}",
'HU' => "{name}
{company}
{city}
{address_1}
{address_2}
{postcode}
{country}",
'IS' => $postcode_before_city,
'IT' => "{company}
{name}
{address_1}
{address_2}
{postcode}
{city}
{state_upper}
{country}",
'JP' => "{postcode}
{state}{city}{address_2}
{address_1}
{company}
{last_name} {first_name}
{country}",
'LI' => $postcode_before_city,
'NL' => $postcode_before_city,
'NZ' => "{name}
{company}
{address_1}
{address_2}
{city} {postcode}
{country}",
'NO' => $postcode_before_city,
'PL' => $postcode_before_city,
'SK' => $postcode_before_city,
'SI' => $postcode_before_city,
'ES' => "{name}
{company}
{address_1}
{address_2}
{postcode} {city}
{state}
{country}",
'SE' => $postcode_before_city,
'TR' => "{name}
{company}
{address_1}
{address_2}
{postcode} {city} {state}
{country}",
'US' => "{name}
{company}
{address_1}
{address_2}
{city}, {state} {postcode}
{country}",
'VN' => "{name}
{company}
{address_1}
{city}
{country}",
));
endif;
return $this->address_formats;
}
如果要強制所有國家使用相同格式,則第一段程式碼需要改為
add_filter( 'WooCommerce_localisation_address_formats', 'wc_my_account_address_formats' );
function wc_my_account_address_formats( $formats ){
$new_formats['default'] = "{name}
{email}
{phone}";
return $new_formats;
}