Skip to content

Instantly share code, notes, and snippets.

@wpmudev-sls
Last active May 1, 2019 22:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wpmudev-sls/3e09c8a22c8290e42e1b4949e3c95a2b to your computer and use it in GitHub Desktop.
Save wpmudev-sls/3e09c8a22c8290e42e1b4949e3c95a2b to your computer and use it in GitHub Desktop.
Membership 2 - Change Reg/Prof Fields
<?php
/**
* Plugin Name: Membership 2 - Change Reg/Prof Fields
* Plugin URI: https://premium.wpmudev.org/
* Description: Adds Custom fields to Registration/Profile and removes Username
* Version: 1.0.0
* Author: Konstantinos Xenos @ WPMUDEV
* Author URI: https://premium.wpmudev.org/
* License: GPLv2 or later
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'Membership_Add_My_Custom_Fields' ) ) {
class Membership_Add_My_Custom_Fields {
/**
* Constructor.
*/
public function __construct() {
add_action( 'init', array( $this, 'init' ) );
}
/**
* Initialization.
*/
public function init() {
add_filter( 'ms_shortcode_register_form_fields', array( $this, 'add_my_custom_mp_fields' ) );
add_filter( 'ms_view_profile_fields', array( $this, 'add_my_custom_mp_fields_profile' ) );
add_filter( 'ms_view_member_editor_fields_edit', array( $this, 'add_my_custom_mp_fields_profile_editor' ) );
add_filter( 'ms_shortcode_logout_message', array( $this, 'add_my_custom_mp_logout_message' ) );
add_action( 'ms_view_account_profile_before_card', array( $this, 'add_my_custom_mp_fields_profile_page' ) );
add_action( 'ms_view_frontend_profile_after_fields', array( $this, 'add_my_custom_mp_fields_profile_js' ) );
add_action( 'after_signup_form', array( $this, 'add_my_custom_mp_fields_js' ) );
add_action( 'user_register', array( $this, 'add_my_custom_mp_fields_meta' ), 10, 1 );
add_action( 'profile_update', array( $this, 'add_my_custom_mp_fields_meta' ), 10, 1 );
add_action( 'show_user_profile', array( $this, 'extra_user_profile_fields' ) );
add_action( 'edit_user_profile', array( $this, 'extra_user_profile_fields' ) );
}
/**
* Adds a custom logout message on the profile page
*/
public function add_my_custom_mp_logout_message() {
$current_user = wp_get_current_user();
$content = esc_html__( 'You are logged in as', 'membership2' );
$content .= ' ' . $current_user->user_email . '. ';
return $content;
}
/**
* Filters the form and adds the custom fields on registerration.
*/
public function add_my_custom_mp_fields( $fields ) {
$array = array_slice( $fields, 0, 5, true ) +
array(
'suburb' => array(
'id' => 'suburb',
'title' => esc_html__( 'Suburb', 'membership2' ),
'placeholder' => '',
'type' => 'text',
'value' => '',
),
'phone' => array(
'id' => 'phone',
'title' => esc_html__( 'Phone Number', 'membership2' ),
'placeholder' => '',
'type' => 'text',
'value' => '',
),
'relationship' => array(
'id' => 'relationship',
'title' => esc_html__( 'Relationship', 'membership2' ),
'placeholder' => '',
'type' => 'select',
'field_options' => array(
'Customer' => esc_html__( 'Customer', 'membership2' ),
'Family Member' => esc_html__( 'Family Member', 'membership2' ),
'Employee' => esc_html__( 'Employee', 'membership2' ),
'Registered Contractor' => esc_html__( 'Registered Contractor', 'membership2' ),
'Service Provider' => esc_html__( 'Service Provider', 'membership2' ),
'Nominee' => esc_html__( 'Nominee', 'membership2' ),
'Auditor' => esc_html__( 'Auditor', 'membership2' ),
),
),
) +
array_slice( $fields, 5, count( $fields ) - 1, true );
$array['username']['type'] = 'hidden';
return $array;
}
/**
* Filters the form and adds the custom fields on profile.
*/
public function add_my_custom_mp_fields_profile( $fields ) {
$array = array_slice( $fields, 0, 5, true ) +
array(
'suburb' => array(
'id' => 'suburb',
'title' => esc_html__( 'Suburb', 'membership2' ),
'placeholder' => '',
'type' => 'text',
'value' => get_user_meta( get_current_user_id(), 'ms_custom_field_suburb', true ),
),
'phone' => array(
'id' => 'phone',
'title' => esc_html__( 'Phone Number', 'membership2' ),
'placeholder' => '',
'type' => 'text',
'value' => get_user_meta( get_current_user_id(), 'ms_custom_field_phone', true ),
),
'relationship' => array(
'id' => 'relationship',
'title' => esc_html__( 'Relationship', 'membership2' ),
'placeholder' => '',
'type' => 'select',
'value' => get_user_meta( get_current_user_id(), 'ms_custom_field_relationship', true ),
'field_options' => array(
'Customer' => esc_html__( 'Customer', 'membership2' ),
'Family Member' => esc_html__( 'Family Member', 'membership2' ),
'Employee' => esc_html__( 'Employee', 'membership2' ),
'Registered Contractor' => esc_html__( 'Registered Contractor', 'membership2' ),
'Service Provider' => esc_html__( 'Service Provider', 'membership2' ),
'Nominee' => esc_html__( 'Nominee', 'membership2' ),
'Auditor' => esc_html__( 'Auditor', 'membership2' ),
),
),
) +
array_slice( $fields, 5, count( $fields ) - 1, true );
$array['username']['type'] = 'hidden';
return $array;
}
/**
* Adds the custom fields on membership editor
*/
public function add_my_custom_mp_fields_profile_editor( $fields ) {
$fields['editor']['suburb'] = array(
'id' => 'suburb',
'title' => esc_html__( 'Suburb', 'membership2' ),
'placeholder' => '',
'type' => 'text',
'value' => get_user_meta( esc_attr( $_GET['user_id'] ), 'ms_custom_field_suburb', true ),
);
$fields['editor']['phone'] = array(
'id' => 'phone',
'title' => esc_html__( 'Phone Number', 'membership2' ),
'placeholder' => '',
'type' => 'text',
'value' => get_user_meta( esc_attr( $_GET['user_id'] ), 'ms_custom_field_phone', true ),
);
$fields['editor']['relationship'] = array(
'id' => 'relationship',
'title' => esc_html__( 'Relationship', 'membership2' ),
'placeholder' => '',
'type' => 'select',
'value' => get_user_meta( esc_attr( $_GET['user_id'] ), 'ms_custom_field_relationship', true ),
'field_options' => array(
'Customer' => esc_html__( 'Customer', 'membership2' ),
'Family Member' => esc_html__( 'Family Member', 'membership2' ),
'Employee' => esc_html__( 'Employee', 'membership2' ),
'Registered Contractor' => esc_html__( 'Registered Contractor', 'membership2' ),
'Service Provider' => esc_html__( 'Service Provider', 'membership2' ),
'Nominee' => esc_html__( 'Nominee', 'membership2' ),
'Auditor' => esc_html__( 'Auditor', 'membership2' ),
),
);
return $fields;
}
/**
* Displays the fields on membership profile page
*/
public function add_my_custom_mp_fields_profile_page() {
ob_start();
?>
<script>
( function ( $ ) {
$( document ).ready( function(){
$( 'div#account-profile table tr:eq( 2 )' ).remove();
$( 'div#account-profile table' ).append(
'<tr><th><?php esc_html_e( 'Suburb', 'membership2' ); ?></th><td><?php echo get_user_meta( get_current_user_id(), 'ms_custom_field_suburb', true ); ?></td></tr>' +
'<tr><th><?php esc_html_e( 'Phone Number', 'membership2' ); ?></th><td><?php echo get_user_meta( get_current_user_id(), 'ms_custom_field_phone', true ); ?></td></tr>' +
'<tr><th><?php esc_html_e( 'Relationship', 'membership2' ); ?></th><td><?php echo get_user_meta( get_current_user_id(), 'ms_custom_field_relationship', true ); ?></td></tr>'
);
});
} ( jQuery ) )
</script>
<?php
$scripts = ob_get_clean();
echo $scripts;
}
/**
* Adds the necessary jquery to the profile to disable the e-mail change.
*/
public function add_my_custom_mp_fields_profile_js() {
ob_start();
?>
<script>
( function ( $ ) {
$( document ).ready( function(){
$( 'input#email' ).attr( 'disabled', true );
});
} ( jQuery ) )
</script>
<?php
$scripts = ob_get_clean();
echo $scripts;
}
/**
* Adds the necessary jquery to 'copy' the email as a username on registration.
*/
public function add_my_custom_mp_fields_js() {
?>
<script>
( function ( $ ) {
$( document ).ready( function(){
$( 'input#email' ).on( 'focusout', function() {
var $mail = $( this ).val();
$( 'input#username' ).val( $mail );
});
});
} ( jQuery ) )
</script>
<?php
$scripts = ob_get_clean();
echo $scripts;
}
/**
* Updates the usermeta for the custom fields.
*/
public function add_my_custom_mp_fields_meta( $user_id ) {
$suburb = '';
$phone = '';
$relationship = '';
if ( ! empty( $_POST['suburb'] ) ) {
$suburb = sanitize_text_field( $_POST['suburb'] );
}
if ( ! empty( $_POST['phone'] ) ) {
$phone = sanitize_text_field( $_POST['phone'] );
}
if ( ! empty( $_POST['relationship'] ) ) {
$relationship = sanitize_text_field( $_POST['relationship'] );
}
update_user_meta( $user_id, 'ms_custom_field_suburb', $suburb );
update_user_meta( $user_id, 'ms_custom_field_phone', $phone );
update_user_meta( $user_id, 'ms_custom_field_relationship', $relationship );
}
/**
* Adds custom fields to User Profile
*/
public function extra_user_profile_fields( $user ) {
$msselect = get_user_meta( $user->ID, 'ms_custom_field_relationship', true );
?>
<h3><?php _e( 'Membership Custom Fields', 'membership2' ); ?></h3>
<table class="form-table">
<tr>
<th><label for="suburb"><?php esc_html_e( 'Suburb', 'membership2' ); ?></label></th>
<td>
<input type="text" name="suburb" id="suburb" value="<?php echo get_user_meta( $user->ID, 'ms_custom_field_suburb', true ); ?>" class="regular-text" /><br />
</td>
</tr>
<tr>
<th><label for="phone"><?php esc_html_e( 'Phone Number', 'membership2' ); ?></label></th>
<td>
<input type="text" name="phone" id="phone" value="<?php echo get_user_meta( $user->ID, 'ms_custom_field_phone', true ); ?>" class="regular-text" /><br />
</td>
</tr>
<tr>
<th><label for="relationship"><?php esc_html_e( 'Relationship', 'membership2' ); ?></label></th>
<td>
<select id="relationship" name="relationship">
<option value="Customer" <?php echo ( 'Customer' === $msselect ) ? 'selected="selected"' : ''; ?>>
<?php esc_html_e( 'Customer', 'membership2' ); ?>
</option>
<option value="Family Member"<?php echo ( 'Family Member' === $msselect ) ? 'selected="selected"' : ''; ?>>
<?php esc_html_e( 'Family Member', 'membership2' ); ?>
</option>
<option value="Employee"<?php echo ( 'Employee' === $msselect ) ? 'selected="selected"' : ''; ?>>
<?php esc_html_e( 'Employee', 'membership2' ); ?>
</option>
<option value="Registered Contractor"<?php echo ( 'Registered Contractor' === $msselect ) ? 'selected="selected"' : ''; ?>>
<?php esc_html_e( 'Registered Contractor', 'membership2' ); ?>
</option>
<option value="Service Provider"<?php echo ( 'Service Provider' === $msselect ) ? 'selected="selected"' : ''; ?>>
<?php esc_html_e( 'Service Provider', 'membership2' ); ?>
</option>
<option value="Nominee"<?php echo ( 'Nominee' === $msselect ) ? 'selected="selected"' : ''; ?>>
<?php esc_html_e( 'Nominee', 'membership2' ); ?>
</option>
<option value="Auditor"<?php echo ( 'Auditor' === $msselect ) ? 'selected="selected"' : ''; ?>>
<?php esc_html_e( 'Auditor', 'membership2' ); ?>
</option>
</select>
</td>
</tr>
</table>
<?php
}
}
new Membership_Add_My_Custom_Fields();
}
@one9ooh6
Copy link

one9ooh6 commented May 1, 2019

Thanks so much for the solution. I didn't want to use BuddyPress to add one custom field. Where exactly is the registration form to see to input the data? That's what I'm missing at this point.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment