2016-06-09 40 views
1

我们正在尝试使用docs.woothemes上记录的方法修改默认的Woocommerce Checkout航运城市字段,但已遇到问题。Woocommerce覆盖航运城市选择字段

我们已将shipping_city文本字段替换为select下拉菜单。

在页面加载select下拉菜单被替换为默认文本字段,并且如果可用,则自动填充用户先前的递送目的地。

但是,如果页面被重新加载/刷新,那么文本字段会被替换为新的和期望的select下拉菜单。

我们已经使用多个WordPress add_filter函数过滤了该字段,并且上下都改变了priority(-999至999)。

我们已经运行filter内部和我们的配送方式之外Class

我们甚至禁用浏览器自动形式完成,因为我们......嗯跑出来的其他的想法...

select场工作......它运作良好。运输成本得到更新,数据被返回,存储并通过电子邮件发送。

使用的filters有:

add_filter('woocommerce_checkout_fields', array($this, 'fn_name'));

add_filter('woocommerce_default_address_fields', array($this, 'fn_name'));

$field阵列看起来像:

$fields[ 'shipping' ][ 'shipping_city' ] = array(
        'label' => __('Suburb/City', 'woocommerce'), 
        'required' => FALSE, 
        'clear' => TRUE, 
        'type' => 'select', 
        'options' => $options_array, 
        'class' => array('update_totals_on_change') 
       ); 

       return $fields; 

奇怪的是,当我们跑同一字段中的两个过滤器; sendond的标签被第一个覆盖...去图... Gee我希望我知道Ajax ...我认为它的Ajax但是如果我知道AJAX我会知道它是否是Ajax ...

WordPress版本4.5.2 & & WooCommerce版本2.5.5

回答

2

这应该与woocommerce_form_field_args挂钩工作,这种方式:

add_filter('woocommerce_form_field_args', 'custom_form_field_args', 10, 3); 
function custom_form_field_args($args, $key, $value) { 
    if ($args['id'] == 'billing_city') { 
    $args = array(
      'label' => __('Suburb/City', 'woocommerce'), 
      'required' => FALSE, 
      'clear' => TRUE, 
      'type' => 'select', 
      'options' => $options_array, 
      'class' => array('update_totals_on_change') 
     ); 
    } // elseif … and go on 

    return $args; 
}; 

这是他默认$args参数值:

$defaults = array(
    'type'    => 'text', 
    'label'    => '', 
    'description'  => '', 
    'placeholder'  => '', 
    'maxlength'   => false, 
    'required'   => false, 
    'autocomplete'  => false, 
    'id'    => $key, 
    'class'    => array(), 
    'label_class'  => array(), 
    'input_class'  => array(), 
    'return'   => false, 
    'options'   => array(), 
    'custom_attributes' => array(), 
    'validate'   => array(), 
    'default'   => '', 
); 

参考文献:

+0

感谢@LoicTheAztec - 初步测试还是很有希望AJAX是抛出一个嘘声像配合,但我们会运行一些变化,看看我们是否可以解决问题。 –