Я настраиваю новый веб-сайт с 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' : ???
}
Другое возможное решение - удалить плагин и попробовать новую кодировку или изменить поле города.как области, чтобы плагин мог читать, но это не профессионально.Спасибо заранее!