簡體   English   中英

將結帳郵政編碼字段自定義為自定義下拉菜單

[英]Customizing checkout Postcode field into a custom drop-down menu

我正在建立一個基於 WooCommerce 的商店。 我有一個郵政編碼列表,每個郵政編碼都有不同的運費(有些提供免費送貨,有些提供統一費率)。

當客戶進入結賬頁面時,他需要在輸入字段中輸入他的郵政編碼。 根據郵政編碼,訂單預覽將顯示不同的運費總額(免費或統一費率)。

以下是class-wc-countries.php輸入字段的樣子:

public function get_default_address_fields() {
    $fields = array(
    'postcode' => array(
            'label'        => __( 'Postcode/ZIP', 'woocommerce' ),
            'required'     => true,
            'class'        => array( 'form-row-first', 'address-field' ),
            'clear'        => true,
            'validate'     => array( 'postcode' ),
            'autocomplete' => 'postal-code',
        ),
    );

但是,我想要做的是將這個字段變成一個下拉菜單,這樣客戶就可以選擇他的郵政編碼選項而不是輸入它。

我設法將其下拉,但是每當我選擇任何選項時,它似乎都不會像輸入字段那樣更改運輸總額。

這是我所做的:

public function get_default_address_fields() {
    $fields = array(
        'postcode' => array(
            'label'        => __( 'Postcode/ZIP', 'woocommerce' ),
            'required'     => true,
            'class'        => array( 'form-row-first', 'address-field' ),
            'clear'        => true,
            'validate'     => array( 'postcode' ),
            'autocomplete' => 'postal-code',
            'type' => 'select',
            'options' => array(
                              'opt1' => "001122", "112200", "334400")
        ),
    );

但這不起作用。

我錯過了什么嗎?
如何讓這些下拉選項更改運費總額?

謝謝

這將部分回答您的問題,並只向您展示自定義結帳字段的方法。

覆蓋核心文件並不是真正的事情,因為每次更新 Woocommerce 時您都會丟失所有內容,因此不建議這樣做。

要以干凈的方式覆蓋結帳字段,首先您需要使用掛接在這兩個過濾器鈎子之一中的自定義函數:

  • woocommerce_default_address_fields (自定義帳單和送貨地址默認字段時)
  • woocommerce_checkout_fields (自定義帳單或送貨地址字段以及其他字段時)。

相關官方文檔: 使用操作和過濾器自定義結帳字段

所以在這里我選擇了第一個鈎子,我更正了你的郵政編碼數組。 你會得到:

在此處輸入圖片說明

這是功能和經過測試的代碼:

add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_postcode_field' );
function custom_override_default_postcode_field( $address_fields ) {
    // Your postcodes array
    $postcode_array = array(
        'opt1' => "001122",
        'opt2' => "112200",
        'opt3' => "334400"
    );
    $address_fields['postcode']['type'] = 'select';
    $address_fields['postcode']['options'] = $postcode_array;

    return $address_fields;
}

代碼位於活動子主題(或主題)的 function.php 文件或任何插件文件中。

由於選擇一個post-code是一個實時的前端事件,你需要使用一個復雜的javascript/ajax腳本和一些遠程php函數來實現你想要做的事情,這是一個真正的開發......這也取決於在您的設置上並且處理起來很復雜,因為在該結帳頁面中已經有一些 woocommerce ajax 腳本在運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM