如何将数组发送到switch语句?

时间:2019-03-28 21:51:53

标签: php plugins woocommerce hook

我正在用Woocommerce建立一个新网站,我需要在运输和开票表格中添加一个新的自定义字段,因为产品应发送到城市内的不同区域,并且运输价格应根据交付区域。项目中还安装了 Woocommerce Advanced Shipping 。我无法将城市区域数组发送到WC Advance Shipping插件中的类中的switch语句中,以便正常工作。

首先,我为城市内的所有地区创建了自定义字段(请参见第一个代码)。然后,在Woocommerce Advanced Shipping插件中,我在“地区”的下拉列表中添加了一个新条件。否则,将不会有条件,因为该网站没有针对城市的运输价格。问题是将城市区域数组与下拉菜单的功能连接起来,这由针对不同条件的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' : ???
}

另一种可能的解决方案是删除插件,然后尝试使用新的编码或将城市字段修改为区域,以便插件可以读取,但这并不专业。谢谢你!

0 个答案:

没有答案