【问题标题】:Customize addresses fields on WooCommerce My account and Checkout自定义 WooCommerce 我的帐户和结帐上的地址字段
【发布时间】:2020-01-03 21:24:49
【问题描述】:

我正在使用 woocommerce_checkout_fields 过滤器来编辑 woocommerce 字段标签的值。它在结帐页面上运行良好(如您所料),但我不明白为什么它在帐户页面上也不起作用。我以为这些字段仍然来自同一个地方?更具体地说,我说的是 woocommerce 帐户页面上编辑地址端点上的地址字段?

我的代码尝试:

function custom_woocommerce_fields( $fields ) {

    // Billing Fields
    $fields['billing']['billing_first_name']['label'] = 'First name';
    $fields['billing']['billing_last_name']['label'] = 'Last name';
    $fields['billing']['billing_company']['label'] = 'Company name';
    $fields['billing']['billing_address_1']['label'] = 'Street address';
    $fields['billing']['billing_address_2']['label'] = 'Apartment, unit, etc.';
    $fields['billing']['billing_city']['label'] = 'City';
    $fields['billing']['billing_country']['label'] = 'Country';
    $fields['billing']['billing_state']['label'] = 'County/State';
    $fields['billing']['billing_postcode']['label'] = 'Postcode';
    $fields['billing']['billing_email']['label'] = 'Email';
    $fields['billing']['billing_phone']['label'] = 'Phone';

    // Shipping Fields
    $fields['shipping']['shipping_first_name']['label'] = 'First name';
    $fields['shipping']['shipping_last_name']['label'] = 'Last name';
    $fields['shipping']['shipping_company']['label'] = 'Company name';
    $fields['shipping']['shipping_address_1']['label'] = 'Street address';
    $fields['shipping']['shipping_address_2']['label'] = 'Apartment, unit, etc.';
    $fields['shipping']['shipping_city']['label'] = 'City';
    $fields['shipping']['shipping_country']['label'] = 'Country';
    $fields['shipping']['shipping_state']['label'] = 'County/State';
    $fields['shipping']['shipping_postcode']['label'] = 'Postcode';
    $fields['shipping']['shipping_email']['label'] = 'Email';
    $fields['shipping']['shipping_phone']['label'] = 'Phone';

    // Account Fields
    $fields['account']['account_username']['label'] = 'Username or email';
    $fields['account']['account_password']['label'] = 'Password';

    // Order Fields
    $fields['order']['order_comments']['label'] = 'Order notes';

    return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'custom_woocommerce_fields' );

我的帐户上没有自定义字段 > 地址(编辑帐单或送货地址)。

【问题讨论】:

    标签: php wordpress woocommerce checkout hook-woocommerce


    【解决方案1】:

    钩子woocommerce_checkout_fields 只允许在结帐页面上进行自定义,并且不会影响我的帐户“地址”部分字段。

    以下内容将同时影响我的帐户“地址”部分字段和结帐字段,允许在相关的我的帐户部分上自定义帐单和运输字段。


    1) 对于我的帐户和结帐上的地址字段(包括账单和送货)

    在某些情况下,您需要对地址字段使用此过滤器,它适用于所有帐单和运输默认字段

    // Billing and Shipping fields on my account edit-addresses and checkout
    add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields' );
    function custom_override_default_address_fields( $fields ) {
        $fields['first_name']['label'] = 'First name';
        $fields['last_name']['label'] = 'Last name';
        $fields['company']['label'] = 'Company name';
        $fields['address_1']['label'] = 'Street address';
        $fields['address_2']['label'] = 'Apartment, unit, etc.';
        $fields['city']['label'] = 'City';
        $fields['country']['label'] = 'Country';
        $fields['state']['label'] = 'County/State';
        $fields['postcode']['label'] = 'Postcode';
    
        return $fields;
    }
    

    您可以使用 WooCommerce 条件标签 is_account_page() 和 is_checkout() 来定位我的帐户页面或结帐页面...


    2) 对于我的帐户编辑地址和结帐上的帐单字段:

    // Billing fields on my account edit-addresses and checkout
    add_filter( 'woocommerce_billing_fields' , 'custom_billing_fields' );
    function custom_billing_fields( $fields ) {
    
        // Billing Fields
        $fields['billing_first_name']['label'] = 'First name';
        $fields['billing_last_name']['label'] = 'Last name';
        $fields['billing_company']['label'] = 'Company name';
        $fields['billing_address_1']['label'] = 'Street address';
        $fields['billing_address_2']['label'] = 'Apartment, unit, etc.';
        $fields['billing_city']['label'] = 'City';
        $fields['billing_country']['label'] = 'Country';
        $fields['billing_state']['label'] = 'County/State';
        $fields['billing_postcode']['label'] = 'Postcode';
        $fields['billing_email']['label'] = 'Email';
        $fields['billing_phone']['label'] = 'Phone';
    
        return $fields;
    }
    

    3) 对于我的帐户编辑地址和结帐上的运输字段

    // Shipping fields on my account edit-addresses and checkout
    add_filter( 'woocommerce_shipping_fields' , 'custom_shipping_fields' );
    function custom_shipping_fields( $fields ) {
    
        // Shipping Fields
        $fields['shipping_first_name']['label'] = 'First name';
        $fields['shipping_last_name']['label'] = 'Last name';
        $fields['shipping_company']['label'] = 'Company name';
        $fields['shipping_address_1']['label'] = 'Street address';
        $fields['shipping_address_2']['label'] = 'Apartment, unit, etc.';
        $fields['shipping_city']['label'] = 'City';
        $fields['shipping_country']['label'] = 'Country';
        $fields['shipping_state']['label'] = 'County/State';
        $fields['shipping_postcode']['label'] = 'Postcode';
        $fields['shipping_email']['label'] = 'Email';
        $fields['shipping_phone']['label'] = 'Phone';
    
        return $fields;
    }
    

    4) 所有(其他)字段仅在结帐时:

    // All fields only on checkout
    add_filter( 'woocommerce_checkout_fields' , 'other_custom_checkout_fields' );
    function other_custom_checkout_fields( $fields ) {
    
        // Account Fields
        $fields['account']['account_username']['label'] = 'Username or email';
        $fields['account']['account_password']['label'] = 'Password';
    
        // Order Fields
        $fields['order']['order_comments']['label'] = 'Order notes';
    
        return $fields;
    }
    

    5) 另外,根据所选国家/地区,您应该需要使用过滤器:

    • woocommerce_country_locale_field_selectors
    • woocommerce_get_country_locale_default

    这些位于WC_Country Class。

    代码在您的活动子主题(或活动主题)的functions.php 文件中。


    相关官方文档:Customizing checkout fields using actions and filters

    【讨论】:

    • 感谢您,但这是否也会影响帐户页面上显示的字段,例如编辑地址?这就是我遇到麻烦的地方?
    • 快到了,@loictheaxtec,但这不适用于“billing_state”或“billing_postcode”?看起来很奇怪。
    • 我之前试过这个,它确实对某些字段有帮助,但对帐单字段的邮政编码和州没有帮助,但是 ti 确实为运输字段修复了它们。这可能是一个优先问题吗?看起来很奇怪,这太难了
    • @dungey_140 对我来说,它适用于使用店面主题的最后一个 WooCommerce 版本……可能是由于某些第三方插件、您的主题或其他一些相关的自定义设置。
    • 似乎不是,即使禁用了所有插件并且注释掉了其他主题代码,也无法正常工作。我们可以转移到聊天中,以便我可以向您发送实时链接吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2015-12-16
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多