2017-06-21 27 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

其實我們有一個額外的服務地址,例如結算和運輸,以及爲什麼這個地址有一個很長的故事,不能在這裏解釋:'( –