2014-02-14 5 views
4

Я создаю пользовательский способ доставки для Woocommerce, и одна вещь, на которой я полностью зависаю, - это передать пользовательские значения функции calculate_shipping(), когда она используется на на странице «Корзина» или «Оформить заказ».Пользовательские поля Woocommerce для калькулятора доставки

Мне нужно пройти несколько определенных пользователем переменных, которые будут влиять на котировку - то есть «Есть Адрес места жительства», «Is Trade Show», и т.д. и т.п.

calculate_shipping получает массив $ пакет, который содержит массив 'destination', но это включает только стандартные данные add1, add2, city, state, zip, country. Я добавил пользовательские поля на страницу проверки как для выставления счетов, так и для доставки, но я все еще не могу понять, как сделать эти значения доступными для функции calculate_shipping.

Я добавил пользовательское поле следующим образом:

add_filter('woocommerce_checkout_fields' , 'custom_override_checkout_fields'); 

// Our hooked in function - $fields is passed via the filter! 
function custom_override_checkout_fields($fields) { 
    $fields['shipping']['is_residential'] = array(
    'label'  => __('Residential Address?', 'woocommerce'), 
'type'  => 'checkbox', 
'required' => false, 
'class'  => array('form-row-wide'), 
'clear'  => true 
); 

    return $fields; 
} 

И я вижу это поле появляется на участке судоходства формы заказа. Однако я не вижу, как я могу получить к нему доступ в любом месте. Даже если сделать print_r($_POST) на странице проверки, это поле не является частью данных сообщения, даже после того, как я знаю, что форма была обновлена ​​и повторно отправлена.

Но самое главное, мне нужно добавить содержимое переданного поля в объект пакета $, который Woocommerce передает на функцию calculate_shipping() метода доставки.

Я просто не уверен, с чего начать с этого.

+0

Обычно это полезно для людей, если вы приводите фрагмент кода, который вы написали до сих пор, который демонстрирует проблему, с которой вы столкнулись, а затем укажите, где проблема в этом коде, а не просто * код, который вы написали. – neminem

+0

Я добавил код выше, но я не уверен, насколько он будет полезен. Самое главное, что мне нужно, чтобы пользовательские поля проверки были доступны как-то, и до сих пор я даже не могу найти значения в $ _POST – HeruRaHa

ответ

2

Вы не можете рассчитывать на добавление полей выписки и их наличие на странице корзины.

Правильный способ - использовать тележки.

Проверить function get_shipping_packages() из класса-WC-cart.php

public function get_shipping_packages() { 
     // Packages array for storing 'carts' 
     $packages = array(); 

     $packages[0]['contents']     = $this->get_cart();  // Items in the package 
     $packages[0]['contents_cost']   = 0;      // Cost of items in the package, set below 
     $packages[0]['applied_coupons']   = $this->applied_coupons; 
     $packages[0]['destination']['country'] = WC()->customer->get_shipping_country(); 
     $packages[0]['destination']['state']  = WC()->customer->get_shipping_state(); 
     $packages[0]['destination']['postcode'] = WC()->customer->get_shipping_postcode(); 
     $packages[0]['destination']['city']  = WC()->customer->get_shipping_city(); 
     $packages[0]['destination']['address'] = WC()->customer->get_shipping_address(); 
     $packages[0]['destination']['address_2'] = WC()->customer->get_shipping_address_2(); 

     foreach ($this->get_cart() as $item) 
      if ($item['data']->needs_shipping()) 
       if (isset($item['line_total'])) 
        $packages[0]['contents_cost'] += $item['line_total']; 

     return apply_filters('woocommerce_cart_shipping_packages', $packages); 
    } 

Вы должны крючок в woocommerce_cart_shipping_packages фильтр и добавить свои поля там.

Скорее всего, вам нужно будет добавить их (свои поля) в калькулятор доставки и страницы оформления.

Надеюсь, это поможет.

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