2016-07-15 67 views
2

我無法找到ovveride結算狀態和郵政編碼的方式。WooCommerce - 在現有結帳字段上覆蓋結算狀態和郵政編碼

如何編輯現有結算字段的其他部分,如結算狀態和郵政編碼?

這是我在functions.php文件在我的子主題(我已經包括影響計​​費部分的代碼):

<?php 
function my_custom_checkout_field($checkout) { 
    global $wpdb; 
    $check_zone = $wpdb->get_results("select area_name from brick_area where id='".$_SESSION['area']."'",ARRAY_A); 

       if(!empty($check_zone)){ 
        $check_zoneid = $check_zone['0']; 
       } 


    woocommerce_form_field('my_field_name', array(
     'type'   => 'text', 
     'class'   => array('my-field-class form-row-wide'), 
     'label'   => __('Delivery Area'), 
     'placeholder' => __('Area'), 
     'readonly'  =>'readonly', 
     'default'  => $check_zoneid['area_name'] 
     ), $checkout->get_value('my_field_name')); 


    woocommerce_form_field('my_expected_date', array(
     'type'   => 'text', 
     'class'   => array('my-field-class form-row-wide'), 
     'required'  => true, 
     'label'   => __('Expected Delivery Date'), 
     'placeholder' => __('Enter expected delivery date.'), 
     ), $checkout->get_value('my_expected_date')); 

    /*woocommerce_form_field('my_expected_time', array(
     'type'   => 'text', 
     'class'   => array('my-field-class form-row-wide'), 
     'required'  => true, 
     'label'   => __('Expected Delivery Time'), 
     'placeholder' => __('Enter expected delivery time.'), 
     ), $checkout->get_value('my_expected_time'));*/ 

    woocommerce_form_field('site_contact_name', array(
     'type'   => 'text', 
     'class'   => array('my-field-class form-row-wide'), 
     'required'  => true, 
     'label'   => __('Site Contact Person Name'), 
     'placeholder' => __('Enter site contact person name.'), 
     ), $checkout->get_value('site_contact_name'));  

    woocommerce_form_field('site_contact_phone', array(
     'type'   => 'tel', 
     'class'   => array('my-field-class form-row-wide'), 
     'required'  => true, 
     'label'   => __('Site Contact Phone Number'), 
     'placeholder' => __('Enter site contact phone number.'), 
     ), $checkout->get_value('site_contact_phone'));  

} 
     $fields['billing']['billing_city']['default'] = $_SESSION['cn']; 
     add_filter('woocommerce_default_address_fields' , 'custom_override_default_address_fields'); 
     function custom_override_default_address_fields($address_fields) { 

      // we are changing here billing_state field to required 
      $fields['billing']['billing_state']['required'] = true; 

      return $address_fields; 
     } 
     /*$fields['billing']['my_field_name']['default'] = $check_zoneid['area_name']; 
     $fields['billing']['my_field_name']['label'] = 'Area';*/ 

     return $fields; 
     } 
?>  

感謝

+0

sure @LoicTheAztec – art

回答

5

這是完整的對狀態和帳單郵政編碼覆蓋進行結算的方式,使結算選擇器保留選項。

這裏是代碼的完全功能和測試代碼:

  1. 取消設置計費狀態和後置碼校驗字段
add_filter('woocommerce_checkout_fields' , 'partial_unsetting_checkout_fields'); 
function partial_unsetting_checkout_fields($fields) { 
    unset($fields['billing']['billing_state']); 
    unset($fields['billing']['billing_postcode']); 

    return $fields; 
} 
  • 重新插入定製的帳單州和郵政編碼結賬字段
  • add_filter('woocommerce_default_address_fields' , 'art_override_default_address_fields'); 
    function art_override_default_address_fields($address_fields) { 
    
        // @ for state 
        $address_fields['billing_state']['type'] = 'select'; 
        $address_fields['billing_state']['class'] = array('form-row-wide'); 
        $address_fields['billing_state']['required'] = true; 
        $address_fields['billing_state']['label'] = __('State', 'my_theme_slug'); 
        $address_fields['billing_state']['placeholder'] = __('Enter state', 'my_theme_slug'); 
        $address_fields['billing_state']['default'] ='Choice 1'; 
        $address_fields['billing_state']['options'] = array(
         'option_1' => 'Choice 1', 
         'option_2' => 'Choice 2', 
         'option_3' => 'Choice 3' 
        ); 
    
        // @ for postcode 
        $address_fields['billing_postcode']['type'] = 'text'; 
        $address_fields['billing_postcode']['class'] = array('form-row-wide'); 
        $address_fields['billing_postcode']['required'] = true; 
        $address_fields['billing_postcode']['label'] = __('Postcode', 'my_theme_slug'); 
        $address_fields['billing_postcode']['placeholder'] = __('Enter your postcode', 'my_theme_slug'); 
    
    
        return $address_fields; 
    } 
    

    當然,這下去你的活動子主題的function.php文件或主題

    官方參考:WooThemes - Customizing checkout fields using actions and filters


    關於'class'財產

    有注2種方式來處理它:

    • 領域是單獨一條線(寬度100%),可以使用:'form-row-wide'
    • 有2個字段並排在同一行上,可以使用:
      • 'form-row-first'爲第一場
      • 'form-row-last'用於第二場
    1
    //-------------------------- OVERRIDING BILLING STATE FIELD -------------------------------// 
    
        <?php 
        //Removing previous one by using unset 
          add_filter('woocommerce_checkout_fields' , 'custom_override_checkout_fields'); 
    
          // Our hooked in function - $fields is passed via the filter! 
          function custom_override_checkout_fields($fields) { 
           unset($fields['billing']['billing_state']); 
    
           return $fields; 
          } 
    
    
          add_filter('woocommerce_default_address_fields' , 'art_override_default_address_fields'); 
    
          function art_override_default_address_fields($address_fields) { 
    
           // @ for state 
           $address_fields['Billing_State']['type'] = 'text'; 
           $address_fields['Billing_State']['class'] = array('form-row-wide'); 
           $address_fields['Billing_State']['required'] = true; 
           $address_fields['Billing_State']['label'] = __('State', 'my_theme_slug'); 
           $address_fields['Billing_State']['placeholder'] = __('Enter state', 'my_theme_slug'); 
    
    
           $address_fields['Billing_State']['default'] =hgfdkda; 
    
           return $address_fields; 
          } 
         ?>