Как отправить массив в оператор switch? - PullRequest
0 голосов
/ 29 марта 2019

Я настраиваю новый веб-сайт с Woocommerce, мне нужно было добавить новое настраиваемое поле в форму доставки и выставления счета, потому что товары должны отправляться в разные районы города, а цены на доставку должны меняться в зависимости отзона доставки. Woocommerce Advanced Shipping также установлен в проекте.У меня проблемы с отправкой массива city-area в оператор switch внутри класса из плагина расширенной доставки WC, чтобы он работал.

Сначала я создал настраиваемое поле для всех районов в городе (см. Сначалакод).Затем в плагине Woocommerce Advanced Shipping я добавил новое условие в выпадающий список для «Районов».В противном случае было бы невозможно иметь условие, потому что на сайте нет цены на доставку по сравнению с городами.Проблема состоит в том, чтобы связать массив city-area с функциональностью раскрывающегося списка, это контролируется оператором switch для различных условий.Прямо сейчас внутри плагина у меня есть список областей с их ценами доставки, но изменение области в форме не дает никаких обновлений в корзине.

// Adding districts for the city of Lima on shipping form

add_filter('woocommerce_checkout_fields', 'custom_district_checkout_field');

function custom_district_checkout_field($fields) {
   //the list for this example was shortened
   $option_cities = array(
      ''            =>__('Select your district'),
      'chorrillos'  =>'Chorrillos',
      'miraflores'  =>'Miraflores'
};

$fields['shipping']['shipping_district']['type'] = 'select';
$fields['shipping']['shipping_district']['options'] = $option_cities;
$fields['shipping']['shipping_district']['class'] = array('update_totals_on_change');
$fields['shipping']['shipping_district']['input_class'] = array('wc-enhanced-select');

$fields['billing']['billing_district']['type'] = 'select';
$fields['billing']['billing_district']['options'] = $option_cities;
$fields['billing']['billing_district']['input_class'] = array('wc-enhanced-select');

wc_enqueue_js("jQuery( ':input.wc-enhanced-select' ).filter( ':not(.enhanced)' ).each( function() {var select2_args = { minimumResultsForSearch:5};jQuery( this ).select2( select2_args ).addClass( 'enhanced' );})");

return $fields;

Благодаря apply_filter внутри плагина я смог добавить функцию в свой functions.php , чтобы добавить новое условие для выпадающего списка.

add_filter('was_contitions', 'adding_new_condition');

function adding_new_contidion($condition) {
   $conditions = array(
      __('User Details', 'woocommerce-advanced-shipping') => array(
         'district' =>__('By District', 'woocommerce-advanced-shipping'),
        )
   );
   return $conditions;
}

Внутри плагина есть класс, которыйконтролирует выпадающий.Проблема, которую я имею, состоит в том, чтобы отправить и интегрировать массив внутри коммутатора.У меня также есть проблема манипулирования основным файлом для плагина, потому что для этой функции нет хука.

public function get_value_field_args() {
   $values = array(
      'name' =>'conditions[' . absint($this->group) . '][' . absint ($this->id) . '][value]',
      'placeholder' =>'',
      'type' =>'text',
      'class' =>array('wpc-value')
    );

switch ($this->condition) :
   default:
   case 'subtotal' :
   case 'district' : ???
}

Другое возможное решение - удалить плагин и попробовать новую кодировку или изменить поле города.как области, чтобы плагин мог читать, но это не профессионально.Спасибо заранее!

...