WooCommerce - 覆盖现有结帐字段的结算状态和发布代码

时间:2016-07-15 12:10:19

标签: php wordpress woocommerce checkout custom-fields

我无法找到办理结算状态和发布代码的方法。

如何编辑现有结算字段的其他部分,如结算状态和邮政编码?

这就是我在子主题 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;
        }
 ?>      

由于

2 个答案:

答案 0 :(得分:5)

这是结算状态和结算后代码覆盖的完整方式,使计费选择器保持选项。

这是完整功能和经过测试的代码的代码:

  1. 取消设置结算状态和发布代码结帐字段
  2. 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;
    }
    
    1. 重新插入自定义结算状态和发布代码结帐字段
    2. 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'属性

      的说明      

      有两种方法可以处理它:

           
          
      • 该字段单独在一行(宽度100%),您使用: 'form-row-wide'
      •   
      • 在同一行上并排有2个字段,您可以使用:      
            第一个字段
        • 'form-row-first'
        •   第二个字段
        • 'form-row-last'
        •   
      •   

答案 1 :(得分: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;
            }
        ?>