Wordpress中的WooCommerce将国家/地区类定义如下(为简洁起见)
class WC_Countries {
public $countries;
public function __construct() {
global $woocommerce, $states;
$this->countries = apply_filters( 'woocommerce_countries', array(
'AF' => __( 'Afghanistan', 'woocommerce' ),
'AX' => __( 'Åland Islands', 'woocommerce' ),
'AL' => __( 'Albania', 'woocommerce' ),
'DZ' => __( 'Algeria', 'woocommerce' ),
));
}
}
下订单时,国家/地区代码会写入Wordpress wp_postmeta表,并且可以使用get_post_meta()
函数在任何可以访问订单ID的地方提取:
get_post_meta( $order->id, '_shipping_country', true ),
问题是,由于我们只是从数据库中提取两个字符,如何将国家/地区代码(例如AF)转换为国家/地区类中给出的国家/地区名称?
答案 0 :(得分:23)
您可以使用WC_Countries
访问WC()->countries
课程。因此,要从订单中获取国家/地区名称,您必须使用:
WC()->countries->countries[ $order->shipping_country ];
在WooCommerce 3.0+上你应该使用:
WC()->countries->countries[ $order->get_shipping_country() ];
如果你想获得状态,你需要在检查之前是否存在,因为WooCommerce不包括所有状态,所以这里你需要什么:
$states = WC()->countries->get_states( $order->get_shipping_country() );
$state = ! empty( $states[ $order->get_shipping_state() ] ) ? $states[ $order->get_shipping_state() ] : '';
答案 1 :(得分:4)
从状态代码中获取状态名称,您可以使用。
WC()->countries->states[$order->billing_country][$order->billing_state];
答案 2 :(得分:0)
我一直在寻找如何获取Woocommerce商店的基本地址,而不是购物车或订单地址,并且该主题包含在与该主题相关的许多Google关键字中。 我遇到以下更新了一些答案的问题: https://wordpress.stackexchange.com/a/334608/177690
private static function afg_getBaseAddressData() {
return array(
'address' => WC()->countries->get_base_address(),
'address-2' => WC()->countries->get_base_address_2(),
'city' => WC()->countries->get_base_city(),
'zip' => WC()->countries->get_base_postcode(),
'state' => WC()->countries->get_base_state(),
'country' => WC()->countries->countries[WC()->countries->get_base_country()],
'mail' => self::afg_getPublicMail()
);
}
private static function afg_getPublicMail() {
//replace by the way you get an email address
return filter_var(get_option('address-public-mail'), FILTER_VALIDATE_EMAIL);
}
public static function afg_getAddressTemplate() {
$datas = apply_filters( 'afg_shop_base_address', self::afg_getBaseAddressData() );
$html = '';
$html .= '<address>';
foreach ($datas as $key => $data) {
if($data) {
$html .= '<p class="address-line '.$key.'">'.$data.'</p>';
}
}
$html .= '</address>';
return $html;
}
答案 3 :(得分:-1)
Console.WriteLine(MyData.Time.ToUniversalTime() + " "+ DateTime.Now.ToUniversalTime());
首先,您已设置产品标签&#34; VIP或您喜欢的任何内容,然后您将其添加到代码中
function a000_remove_bundles_counting(){
//////////////////////////////
global $woocommerce_bundles;
remove_filter( 'woocommerce_cart_contents_count',
array( $woocommerce_bundles->display, 'woo_bundles_cart_contents_count' ) );
}
add_action( 'init', 'a000_remove_bundles_counting' );
///////////////////////////////////////////////////
//////////////////////////////////////////////////////
function d000_cart_contents_count( $count ) {
global $woocommerce;
$cat_check = false;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $cart_item ) { //foreach
$product = $cart_item['data'];
if ( has_term( 'VIP', 'product_tag', $product->id ) ) {//search product_cat
$cat_check = true;
// break because we only need one "true" to matter here
if (!function_exists('woo_override_checkout_fields')) {
function woo_override_checkout_fields( $fields ) { // woo_override_checkout_fields Function
$fields['billing']['billing_country'] = array(
'type' => 'select',
'label' => __('Country', 'woocommerce'),
'options' => array('US' => 'United States(US)')
);
$fields['billing']['billing_state'] = array(
'type' => 'select',
'label' => __('State', 'woocommerce'),
'options' => array('CA' => 'California(CA)')
);
return $fields;
} //end woo_override_checkout_fields Function
}
add_filter( 'woocommerce_checkout_fields' , 'woo_override_checkout_fields' );
} // end search product_cat
}// end foreach
return $count;
}
add_filter( 'woocommerce_cart_contents_count',
'd000_cart_contents_count' );
在这个函数中看是否有任何产品&#34; VIP&#34;产品标签。 和
if ( has_term( 'VIP', 'product_tag', $product->id ) ) {//search product_cat $cat_check = true; }
然后在函数中我们添加函数
$cat_check = true;
函数设置有限 国家作为航运国家的领域。内部
woo_override_checkout_fields( $fields )
设置您要显示的国家/地区
woo_override_checkout_fields( $fields ) { }