Skip to content

Instantly share code, notes, and snippets.

@loretoparisi
Forked from anastis/registration-fields.php
Created July 22, 2018 14:52

Revisions

  1. @anastis anastis created this gist Oct 23, 2017.
    131 changes: 131 additions & 0 deletions registration-fields.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,131 @@
    <?php
    /*
    Plugin Name: Custom Registration Fields
    Plugin URI:
    Description:
    Version: 0.1
    Author: CSSIgniter
    Author URI:
    License: GPLv2 or later
    License URI: http://www.gnu.org/licenses/gpl-2.0.html
    */

    /**
    * Front end registration
    */

    add_action( 'register_form', 'crf_registration_form' );
    function crf_registration_form() {

    $year = ! empty( $_POST['year_of_birth'] ) ? intval( $_POST['year_of_birth'] ) : '';

    ?>
    <p>
    <label for="year_of_birth"><?php esc_html_e( 'Year of birth', 'crf' ) ?><br/>
    <input type="number"
    min="1900"
    max="2017"
    step="1"
    id="year_of_birth"
    name="year_of_birth"
    value="<?php echo esc_attr( $year ); ?>"
    class="input"
    />
    </label>
    </p>
    <?php
    }

    add_filter( 'registration_errors', 'crf_registration_errors', 10, 3 );
    function crf_registration_errors( $errors, $sanitized_user_login, $user_email ) {

    if ( empty( $_POST['year_of_birth'] ) ) {
    $errors->add( 'year_of_birth_error', __( '<strong>ERROR</strong>: Please enter your year of birth.', 'crf' ) );
    }

    if ( ! empty( $_POST['year_of_birth'] ) && intval( $_POST['year_of_birth'] ) < 1900 ) {
    $errors->add( 'year_of_birth_error', __( '<strong>ERROR</strong>: You must be born after 1900.', 'crf' ) );
    }

    return $errors;
    }

    add_action( 'user_register', 'crf_user_register' );
    function crf_user_register( $user_id ) {
    if ( ! empty( $_POST['year_of_birth'] ) ) {
    update_user_meta( $user_id, 'year_of_birth', intval( $_POST['year_of_birth'] ) );
    }
    }

    /**
    * Back end registration
    */

    add_action( 'user_new_form', 'crf_admin_registration_form' );
    function crf_admin_registration_form( $operation ) {
    if ( 'add-new-user' !== $operation ) {
    // $operation may also be 'add-existing-user'
    return;
    }

    $year = ! empty( $_POST['year_of_birth'] ) ? intval( $_POST['year_of_birth'] ) : '';

    ?>
    <h3><?php esc_html_e( 'Personal Information', 'crf' ); ?></h3>

    <table class="form-table">
    <tr>
    <th><label for="year_of_birth"><?php esc_html_e( 'Year of birth', 'crf' ); ?></label> <span class="description"><?php esc_html_e( '(required)', 'crf' ); ?></span></th>
    <td>
    <input type="number"
    min="1900"
    max="2017"
    step="1"
    id="year_of_birth"
    name="year_of_birth"
    value="<?php echo esc_attr( $year ); ?>"
    class="regular-text"
    />
    </td>
    </tr>
    </table>
    <?php
    }

    add_action( 'user_profile_update_errors', 'crf_user_profile_update_errors', 10, 3 );
    function crf_user_profile_update_errors( $errors, $update, $user ) {
    if ( $update ) {
    return;
    }

    if ( empty( $_POST['year_of_birth'] ) ) {
    $errors->add( 'year_of_birth_error', __( '<strong>ERROR</strong>: Please enter your year of birth.', 'crf' ) );
    }

    if ( ! empty( $_POST['year_of_birth'] ) && intval( $_POST['year_of_birth'] ) < 1900 ) {
    $errors->add( 'year_of_birth_error', __( '<strong>ERROR</strong>: You must be born after 1900.', 'crf' ) );
    }
    }

    add_action( 'edit_user_created_user', 'crf_user_register' );


    /**
    * Back end display
    */

    add_action( 'show_user_profile', 'crf_show_extra_profile_fields' );
    add_action( 'edit_user_profile', 'crf_show_extra_profile_fields' );

    function crf_show_extra_profile_fields( $user ) {
    ?>
    <h3><?php esc_html_e( 'Personal Information', 'crf' ); ?></h3>

    <table class="form-table">
    <tr>
    <th><label for="year_of_birth"><?php esc_html_e( 'Year of birth', 'crf' ); ?></label></th>
    <td><?php echo esc_html( get_the_author_meta( 'year_of_birth', $user->ID ) ); ?></td>
    </tr>
    </table>
    <?php
    }