Support

Account

Home Forums ACF PRO Custom fields for registration woocommerce

Solved

Custom fields for registration woocommerce

    • Wax

    • July 5, 2016 at 5:19 am

    Hi,
    I want to add custom fields for customers registration on woocommerce : they must give height and weight to buy a bike.
    I created 2 fields and display them with this location :

    'location' => array (
                array (
                    array (
                        'param' => 'user_form',
                        'operator' => '==',
                        'value' => 'all',
                    ),
                    array (
                        'param' => 'user_role',
                        'operator' => '==',
                        'value' => 'customer',
                    ),
                ),
            ),

    If I go to account to directly create an account, I can see these fields (quite strange for me because I thought that I needed to code something but…). The problem is that they don’t appear on the order form (checkout must be the right word…) where it is possible to create an account while we order a product.

    How can I do this ?

    • James

    • July 5, 2016 at 11:46 am

    Hi @wax

    I’m afraid WooCommerce has a custom registration form on the checkout page. To modify it, please take a look at this page: https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/. To update the custom field value in the database, you can use the update_field() function. This page should give you more idea about it: https://www.advancedcustomfields.com/resources/update_field/.

    I hope this helps. If you have any other questions, feel free to ask me again 🙂

    • Wax

    • July 5, 2016 at 4:00 pm

    Thanks. It looks like it is simpler to do all the thing with woocommerce functions ?
    I found this yesterday :
    https://support.woothemes.com/hc/en-us/articles/203182373-How-to-add-custom-fields-in-user-registration-on-the-My-Account-page
    and I wonder if it is not easier for me to add custom fields like this than with acf (only for registration custom fields).
    Because what you say to me is that I need to “marry” acf code & woocommerce code, isn’t it ?

    • James

    • July 5, 2016 at 4:57 pm

    Hi @wax

    I believe the article you gave me is used on the my-account page, not the checkout page. If you want to add it on the checkout page, I believe the link I gave you is the proper one. In the order process, you can update the field by using the update_field() function. Unfortunately, I’m not sure which hook you need to use. In this case, could you please ask the WooCommerce support instead?

    Thanks 🙂

    • Wax

    • July 5, 2016 at 5:13 pm

    Ok… this part wanna be hard for me (code)

    Thanks for helping me ^^

    • James

    • July 5, 2016 at 7:55 pm
    This reply has been marked as private.
    • Wax

    • July 5, 2016 at 9:04 pm

    Sorry, my english is too bad : I wanted to say “thanks because u have helped me” and not “please help me” lol
    I’ll code it. I’ll just take a lot of time to do it, but I will get there 🙂
    I’m going to follow your advices.

    • Wax

    • July 5, 2016 at 10:28 pm

    Well, with you advices, it seems to work.

    If someone is interested :

    /**
     * Add custom fields to user / checkout
     */
    add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );
    
    function my_custom_checkout_field( $checkout ) {
    
        echo '<div id="bv_custom_checkout_field"><h2>Measurements</h2>';
    
        /* Weight */
        woocommerce_form_field( 'weight_customer', array(
            'type'          => 'text',
            'class'         => array('my-class form-row-wide'),
            'label'         => __('Your weight'),
            'placeholder'   => __('Your weight'),
        ), get_user_meta(  get_current_user_id(),'weight_customer' , true  ) );
    
        echo '</div>';
    }
    
    /**
     * Verification 
     */
    add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
    
    function my_custom_checkout_field_process() {
        // Check 
        if ( ! $_POST['weight_customer'] )
            wc_add_notice( __( 'Do not forget weight.' ), 'error' );
    }
    
     * Update field
     */
    add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );
    
    function my_custom_checkout_field_update_order_meta( $order_id ) {
        if ( ! empty( $_POST['weight_customer'] ) ) {
            update_user_meta( get_current_user_id(), 'weight_customer', sanitize_text_field( $_POST['weight_customer'], '' ));
        }
    }

    I just don’t know how to tell him that it is a number (the weight) but it works.

    • Wax

    • July 5, 2016 at 11:12 pm

    To have numbers instead of text :

    'type'              => 'number', 
            'custom_attributes' => array(
                'step' 	=> 'any',
                'min'	=> '0'
            ), 

    Now, gonna put all of this to trash cause what I really need is to have my custom field on each bought product : if I want to buy a bike for an adult and a bike for a child, I will have to give two different weights… o_O

    • James

    • July 6, 2016 at 12:42 pm

    Hi @wax

    You can always create a field group with a repeater field in it. Then, you can add the field group to the order post type and use acf_form() instead of woocommerce_form_field() with ‘form’ option set to false in the checkout form. This page should give you more idea about it: https://www.advancedcustomfields.com/resources/acf_form/. After that, just update the repeater values by using the update_field() function.

    You can get the posted repeater value like this:

    $repeater_values = $_POST['acf']['field_1234567890abc'];

    Where ‘field_1234567890abc’ is the field key.

    I hope this makes sense 🙂

Viewing 10 posts - 1 through 10 (of 10 total)

You must be logged in to reply to this topic.

We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Cookie Policy. If you continue to use this site, you consent to our use of cookies.