2017-06-21 28 views
0

WooCommerce状态的自定义结账场我用下面的代码自定义状态字段添加到WooCommerce结帐场不工作

add_action('woocommerce_after_order_notes', 'some_custom_checkout_field'); 

function some_custom_checkout_field($checkout){ 
    echo '<div id="some_custom_checkout_field"><h2>' . __('Heading') . '</h2>'; 
    woocommerce_form_field('some_field_name', array(

     'type'   => 'state', 
     'class'   => array('my-field-class form-row-wide'), 
     'label'   => __('Additional Field'), 
     'required'  => true, 
    ), $checkout->get_value('some_field_name')); 

    echo '</div>'; 
} 

我的问题:
当我访问结帐页面,第一次总是创建一个文本框,而不是一个国家下拉菜单,如果我刷新页面,它工作得很好。

回答

0

如果您想要在结算表单中添加额外字段,则需要使用挂钩woocommerce_checkout_fields,您还需要将类型定义为“select”。我使用此代码来添加额外的字段并自定义结账页面。

https://docs.woocommerce.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/#section-3

+0

复杂性来填补选项。想法? –

+0

你可以显示woocommerce的状态选项列表。 –

+0

我们可以通过国家代码得到州名单,我们用什么国家代码来获得州名单? –

0

如果你想添加的状态为你的国家,作为国家领域已存在一些国家在WC,您将需要使用woocommerce_states过滤钩子这样迷上一个自定义函数:

add_filter('woocommerce_states', 'adding_custom_country_states'); 
function adding_custom_country_states($states) { 

    ## Replace Here 'FR' with your country code (and also the keys in the array) 
    $states['FR'] = array(
     'FR01' => __('State 1', 'woocommerce'), 
     'FR02' => __('State 2', 'woocommerce'), 
     'FR03' => __('State 3', 'woocommerce'), 
     'FR04' => __('State N', 'woocommerce'), // And so on 
    ); 

    return $states; 
} 

代码放在您的活动子主题(或主题)的function.php文件或也以任何插件文件。

这是为了避免你的问题的唯一途径


你会得到这样的:如果我们用`select`比我们有很多

enter image description here

+0

我认为这个过滤器也改变了账单和送货地址状态,而我想要自定义状态字段。 –

+0

@ShravanShrama这个过滤器不会改变任何国家的现有国家,但增加国家没有...为什么你添加第二个国家领域以外的帐单和送货地址字段......这很奇怪。你应该解释那个“为什么”。 – LoicTheAztec

+0

其实我们有一个额外的服务地址,例如结算和运输,以及为什么这个地址有一个很长的故事,不能在这里解释:'( –