drcj64241 2018-04-04 01:24
浏览 119
已采纳

在Woocommerce 3中自定义我的帐户地址字段

I would like to remove the form field billing_adress_2 within the template form-edit-addresses.php.

To finish is it possible to reorder the form fields likes this:


first_name - last_name

email - phone

company

address_1

postcode

city

state


This change I would like to apply it only on the page (templates) form-edit-addresses.php

Any help is appreciated

  • 写回答

2条回答 默认 最新

  • doulan1073 2018-04-04 02:46
    关注

    In My account > Adresses section, the below hooked functions will:

    • remove "Address 2" billing and shipping fields
    • reorder billing and shipping address fields
    • reorder billing Email and phone fields (after first and last names)
    • remove "Address 2" from display

    You forgot the "country" field that you can reorder easily in the $sorted_fields array…

    The code:

    // Account Edit Adresses: Remove and reorder addresses fields
    add_filter(  'woocommerce_default_address_fields', 'custom_default_address_fields', 20, 1 );
    function custom_default_address_fields( $fields ) {
        // Only on account pages
        if( ! is_account_page() ) return $fields;
    
        ## ---- 1.  Remove 'address_2' field ---- ##
    
        unset($fields['address_2']);
    
        ## ---- 2.  Sort Address fields ---- ##
    
        // Set the order (sorting fields) in the array below
        $sorted_fields = array('first_name','last_name','company','address_1','country','postcode','city','state');
    
        $new_fields = array();
        $priority = 0;
    
        // Reordering billing and shipping fields
        foreach($sorted_fields as $key_field){
            $priority += 10;
    
            if( $key_field == 'company' )
                $priority += 20; // keep space for email and phone fields
    
            $new_fields[$key_field] = $fields[$key_field];
            $new_fields[$key_field]['priority'] = $priority;
        }
        return $new_fields;
    }
    
    // Account Edit Adresses: Reorder billing email and phone fields
    add_filter(  'woocommerce_billing_fields', 'custom_billing_fields', 20, 1 );
    function custom_billing_fields( $fields ) {
        // Only on account pages
        if( ! is_account_page() ) return $fields;
    
        ## ---- 2.  Sort billing email and phone fields ---- ##
    
        $fields['billing_email']['priority'] = 30;
        $fields['billing_email']['class'] = array('form-row-first');
        $fields['billing_phone']['priority'] = 40;
        $fields['billing_phone']['class'] = array('form-row-last');
    
        return $fields;
    }
    
    // Account Displayed Addresses : Remove 'address_2'
    add_filter( 'woocommerce_my_account_my_address_formatted_address' , 'my_account_address_formatted_addresses', 20, 3 );
    function my_account_address_formatted_addresses( $address, $customer_id, $address_type ) {
        unset($address['address_2']); // remove Address 2
    
        return $address;
    }
    

    Code goes in function.php file of your active child theme (or active theme). Tested and work.

    If you want to make that effective in checkout page too, you will have to remove this lines:

    // Only on account pages
    if( ! is_account_page() ) return $fields;
    

    In each function (2 times)

    enter image description here

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀