Получение имени страны из кода страны в 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 чтобы получить более подробную информацию.