2014-11-14 2 views
3

Я разрабатываю новый метод доставки, который вычисляет скорость, основанную на весе упаковки, томе и почтовом индексе клиентов ... У меня не было проблем с получением информации о корзине на функция calculate_shipping, но когда я пытаюсь получить почтовый индекс от клиента, он, кажется, возвращает пустое значение. Как я могу получить эту информацию во время выполнения, чтобы рассчитать окончательную стоимость?Woocommerce: получите почтовый индекс для доставки, чтобы рассчитать стоимость доставки

public function calculate_shipping($package) { 
    GLOBAL $woocommerce; 
    $items = $woocommerce->cart->get_cart(); 
    $cliente = $woocommerce->customer; 
    $peso = $woocommerce->cart->cart_contents_weight; 
    $customer_postcode = $woocommerce->customer->get_shipping_postcode(); 
} 

Решено:

$customer_postcode = get_user_meta(get_current_user_id(), 'shipping_postcode', true);

+2

Можете ли вы показать нам некоторые из кода ? Вы говорите, что он возвращает «пустое значение», мы не можем не исправлять это, не видя код. – Drown

+0

да, конечно:
общественная функция calculate_shipping ($ пакет) {
\t \t \t GLOBAL $ WooCommerce;
\t \t \t \t $ items = $ woocommerce-> cart-> get_cart();
\t \t \t \t \t $ cliente = $ woocommerce-> customer;
\t \t \t \t \t \t \t \t \t $ Песо = $ woocommerce-> cart-> cart_contents_weight;
\t \t \t \t $ customer_postcode = $ woocommerce-> customer-> get_shipping_postcode();
\t \t \t \t}

за $ customer_postcode = $ woocommerce-> на клиента> get_shipping_postcode(); пуст, единственный способ, которым я могу заставить это работать, - это, если я перейду на страницу проверки и вернусь в корзину – olken

ответ

1

Я думаю, что это обрабатывается в классе клиента

биллинг почтовый индекс

WC()->customer->get_postcode();

или

доставка почтовый индекс

WC()->customer->get_shipping_postcode();

+0

У меня была такая же мысль .... но, похоже, она не загружает данные о доставке клиентов, пока вы не попадете на страницу проверки ... так что в основном прямо сейчас единственный способ, которым я могу заставить это работать, - это перейти на страницу проверки и вернуться в корзину. – olken

0
global $woocommerce; 
$customer = new WC_customer(); 
$customer_id = $customer->ID 

$get_customer_shipping_pincode = get_user_meta($customer_id,"shipping_postcode",true); 
$get_customer_billing_pincode = get_user_meta($customer_id,"billing_postcode",true); 

, если пользователь вошел в систему (для пользователей регистра),

$get_customer_shipping_pincode = get_user_meta(get_current_user_id(),"shipping_postcode",true); 
$get_customer_billing_pincode = get_user_meta(get_current_user_id(),"billing_postcode",true); 
2
global $woocommerce; 
$customer = new WC_Customer(); 
$woocommerce->customer->get_shipping_postcode(); 
+2

. Пожалуйста, рассмотрите возможность редактирования сообщения, чтобы добавить больше объяснений о том, что делает ваш код и почему он решит проблему. Ответ, который в основном содержит только код (даже если он работает), обычно не помогает OP понять их проблему. – Miki

4
// add this in your calculate_shipping function 
public function calculate_shipping($package) { 
    $postal_code = $package[ 'destination' ][ 'postcode' ]); 
} 
+1

Это правильно ans, get_user_meta (get_current_user_id(), 'shipping_postcode', true); на самом деле это неправильный подход. – Alice

Смежные вопросы