简体   繁体   中英

How do I re-order or add priority to a custom field on WooCommerce “My Account” page

I have multiple fields in "My Account" page, so, I wanted to add additional field for Date of Birth.

I am using part of Add birthday field to my account and admin user page

The field shows up but it come in the bottom.

I wanted to add DOB field after my 2 existing fields, I tried using 'priority => 20,' but it doesn't work.

// Add field - my account
function action_woocommerce_edit_account_form() {   
    woocommerce_form_field( 'birthday_field', array(
        'type'        => 'date',
        'label'       => __( 'My Birth Date', 'woocommerce' ),
        'placeholder' => __( 'Date of Birth', 'woocommerce' ),
        'required'    => true,
    ), get_user_meta( get_current_user_id(), 'birthday_field', true ));
}
add_action( 'woocommerce_edit_account_form', 'action_woocommerce_edit_account_form' );


// Validate - my account
function action_woocommerce_save_account_details_errors( $args ){
    if ( isset($_POST['birthday_field']) && empty($_POST['birthday_field']) ) {
        $args->add( 'error', __( 'Please provide a birth date', 'woocommerce' ) );
    }
}
add_action( 'woocommerce_save_account_details_errors','action_woocommerce_save_account_details_errors', 10, 1 );

// Save - my account
function action_woocommerce_save_account_details( $user_id ) {  
    if( isset($_POST['birthday_field']) && ! empty($_POST['birthday_field']) ) {
        update_user_meta( $user_id, 'birthday_field', sanitize_text_field($_POST['birthday_field']) );
    }
}
add_action( 'woocommerce_save_account_details', 'action_woocommerce_save_account_details', 10, 1 );

As can be seen in myaccount/form-edit-account.php template file the woocommerce_edit_account_form action hook is executed after the already existing fields are added.

So if you want to add the field between the existing fields you will have to edit the template file

  • This template can be overridden by copying it to yourtheme/woocommerce/myaccount/form-edit-account.php

  1. You have to delete the code you currently use

  2. Add this code between 2 existing fields (at the place where you want to add the new field) in the myaccount/form-edit-account.php template file

<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
    <label for="account_birthday"><?php esc_html_e( 'Birth day', 'woocommerce' ); ?>&nbsp;<span class="required">*</span></label>
    <input type="date" class="woocommerce-Input woocommerce-Input--text input-text" name="account_birthday" id="account_birthday" value="<?php echo get_user_meta( get_current_user_id(), 'account_birthday', true ); ?>"/>
</p>
<div class="clear"></div>
  1. For validation and saving then add the following code to functions.php ( or the way you prefer to add snippets)
// Validate - my account
function action_woocommerce_save_account_details_errors( $args ){
    if ( isset( $_POST['account_birthday'] ) && empty( $_POST['account_birthday'] ) ) {
        $args->add( 'error', __( 'Please provide a birth date', 'woocommerce' ) );
    }
}
add_action( 'woocommerce_save_account_details_errors','action_woocommerce_save_account_details_errors', 10, 1 );

// Save - my account
function action_woocommerce_save_account_details( $user_id ) {  
    if( isset( $_POST['account_birthday'] ) && ! empty( $_POST['account_birthday'] ) ) {
        update_user_meta( $user_id, 'account_birthday', sanitize_text_field( $_POST['account_birthday'] ) );
    }
}
add_action( 'woocommerce_save_account_details', 'action_woocommerce_save_account_details', 10, 1 );

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM