[WooCommerce] 程式客製化結帳欄位紀錄方法(Session)

有用過綠界物流的人肯定有發現一件事,先前填好結帳欄位的資料因為頁面被刷新後而消失。不過自己手殘或是其他因素導致畫面刷新也是有可能發生這件事。

資料消失要重新填入的體驗真的很不好,所以就需要想辦法存起來啦!

這邊之前有筆記過( [WooCommerce] 片段(fragments)互動程式設計要點 ),這次特別抽出來寫。

下方是程式碼片段是搭配我常用的這篇 [WordPress] 調整適合 WooCommerce 在台銷售結帳頁欄位(含地址郵遞區號選擇) 裡面使用的欄位。

function mxp_wc_save_session_data($value) {
    $data = $_POST['post_data'];
    parse_str(html_entity_decode($data), $pdata);
    if (isset($pdata['billing_first_name']) && $pdata['billing_first_name'] != "") {
        WC()->session->set('billing_first_name', $pdata['billing_first_name']);
    }
    if (isset($pdata['billing_phone']) && $pdata['billing_phone'] != "") {
        WC()->session->set('billing_phone', $pdata['billing_phone']);
    }
    if (isset($pdata['billing_company']) && $pdata['billing_company'] != "") {
        WC()->session->set('billing_company', $pdata['billing_company']);
    }
    if (isset($pdata['billing_email']) && $pdata['billing_email'] != "") {
        WC()->session->set('billing_email', $pdata['billing_email']);
    }
    if (isset($pdata['billing_company_tax_id']) && $pdata['billing_company_tax_id'] != "") {
        WC()->session->set('billing_company_tax_id', $pdata['billing_company_tax_id']);
    }
    $value['#billing_first_name'] = '<input type="text" class="input-text " name="billing_first_name" id="billing_first_name" placeholder="請填入最多中文5個字或英文10個字
" value="' . WC()->session->get('billing_first_name') . '" autocomplete="given-name" autofocus="autofocus">';
    $value['#billing_phone'] = '<input type="tel" class="input-text " name="billing_phone" id="billing_phone" placeholder="手機號碼格式為:0912345678" value="' . WC()->session->get('billing_phone') . '" autocomplete="tel">';
    $value['#billing_company'] = '<input type="text" class="input-text " name="billing_company" id="billing_company" placeholder="" value="' . WC()->session->get('billing_company') . '" autocomplete="organization">';
    $value['#billing_company_tax_id'] = '<input type="text" class="input-text " name="billing_company_tax_id" id="billing_company_tax_id" placeholder="公司統編" value="' . WC()->session->get('billing_company_tax_id') . '">';
    $value['#billing_email'] = '<input type="email" class="input-text " name="billing_email" id="billing_email" placeholder="" value="' . WC()->session->get('billing_email') . '" autocomplete="email">';
    return $value;
}
add_filter('woocommerce_update_order_review_fragments', 'mxp_wc_save_session_data');

其實預設 WooCommerce 是會幫忙存幾個欄位,像是國家、縣市、鄉鎮、地址、郵遞區號等,不含姓名,而其他資料都會放在 post_data 這欄位,需要自己去解析過來儲存。

更多資料:[WooCommerce] 調整結帳欄位的終極指南

Facebook 外掛功能


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *