Получение имени страны из кода страны в WooCommerce

WooCommerce в Wordpress определяет класс стран следующим образом (отредактировано для краткости)

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() функция:

get_post_meta( $order->id, '_shipping_country', true ),

вопрос в том, как мы просто вытаскиваем два символа из БД, как код страны доставки (например, AF) может быть переведен на название страны, данное в странах класс?

4 ответов


вы можете получить доступ к 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() ] : '';

получить имя от код вы можете использовать.

WC()->countries->states[$order->billing_country][$order->billing_state];

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' );

сначала вы установили тег продукта " VIP или что вам нравится, а затем вы добавите его в код

if ( has_term( 'VIP', 'product_tag', $product->id ) ) {//search product_cat 

    $cat_check = true;
}

в этой функции смотря там любой продукт с биркой продукта "VIP". и $cat_check = true;

затем внутри этой функции мы добавляем функцию


основным классом является класс "Woocommerce", который доступен глобально через переменную $woocommerce. Это обрабатывает основные функции WooCommerce, других классов init, хранит переменные сайта и обрабатывает сообщения об ошибках/успехах.

следуйте за этим http://www.phpwala.in/woocommerce/get-full-country-name-from-country-code-in-woocommerce/2015/11 чтобы получить более подробную информацию.