• I notice a lot of members have problems with Register Plus’ custom fields not working. The reason is if those fields are saved to the usermeta DB during the wp_new_user_notification(). If that is never run for some reason (another plugin using that), then the custom fields are not saved.

    The solution is not to save those fields in wp_new_user_notification().

    At the beginning of the class, look for a block of text that says this and add in a new action – user_register. This is called after a user registration request is submitted

    if($_GET['action'] == 'register')
    				{
    					add_action( 'wp_head', array($this, 'PassHead') );
    					add_action ('user_register', array($this, 'SaveNewMember'));
    
    				}

    Then introduce this new function inside the class – the code are lifted exactly from wp_new_user_notification() (they are within the comment blocks –#REGPLUS–)

    function SaveNewMember($user_id)
    		{
    			global $wpdb, $register_plus;
    			$regplus = get_option( 'register_plus' );
    			$regplus_custom = get_option( 'register_plus_custom' );
    			$ref = explode( '?', $_SERVER['HTTP_REFERER']);
    			$ref = $ref[0];
    			$admin = trailingslashit( get_option('siteurl') ) . 'wp-admin/users.php';
    			if( !is_array( $regplus_custom ) ) $regplus_custom = array();
    			if( $regplus['password'] && $_POST['user_pw'] )
    			$plaintext_pass = $wpdb->prepare($_POST['user_pw']);
    			else if( $ref == $admin && $_POST['pass1'] == $_POST['pass2'] )
    			$plaintext_pass = $wpdb->prepare($_POST['pass1']);
    			else
    			$plaintext_pass = $register_plus->RanPass(6);
    			if( $regplus['firstname'] && $_POST['firstname'] )
    			update_usermeta( $user_id, 'first_name', $wpdb->prepare($_POST['firstname']));
    			if( $regplus['lastname'] && $_POST['lastname'] )
    			update_usermeta( $user_id, 'last_name', $wpdb->prepare($_POST['lastname']));
    			if( $regplus['website'] && $_POST['website'] )
    			update_usermeta( $user_id, 'user_url', $wpdb->prepare($_POST['website']));
    			if( $regplus['aim'] && $_POST['aim'] )
    			update_usermeta( $user_id, 'aim', $wpdb->prepare($_POST['aim']));
    			if( $regplus['yahoo'] && $_POST['yahoo'] )
    			update_usermeta( $user_id, 'yim', $wpdb->prepare($_POST['yahoo']));
    			if( $regplus['jabber'] && $_POST['jabber'] )
    			update_usermeta( $user_id, 'jabber', $wpdb->prepare($_POST['jabber']));
    			if( $regplus['about'] && $_POST['about'] )
    			update_usermeta( $user_id, 'description', $wpdb->prepare($_POST['about']));
    			if( $regplus['code'] && $_POST['regcode'] )
    			update_usermeta( $user_id, 'invite_code', $wpdb->prepare($_POST['regcode']));
    			if( $ref != $admin && $regplus['admin_verify'] ){
    				update_usermeta( $user_id, 'admin_verify_user', $user->user_login );
    				$temp_id = 'unverified__' . $register_plus->RanPass(7);
    				$notice = __('Your account requires activation by an administrator before you will be able to login.', 'regplus') . "\r\n";
    			}else if( $ref != $admin && $regplus['email_verify'] ){
    				$code = $register_plus->RanPass(25);
    				update_usermeta( $user_id, 'email_verify', $code );
    				update_usermeta( $user_id, 'email_verify_date', date('Ymd') );
    				update_usermeta( $user_id, 'email_verify_user', $user->user_login );
    				$email_code = '?regplus_verification=' . $code;
    				$prelink = __('Verification URL: ', 'regplus');
    				$notice = __('Please use the link above to verify and activate your account', 'regplus') . "\r\n";
    				$temp_id = 'unverified__' . $register_plus->RanPass(7);
    			}
    			if (!empty($regplus_custom)) {
    				foreach( $regplus_custom as $k=>$v ){
    					$id = $register_plus->Label_ID($v['label']);
    					if( $v['reg'] && $_POST[$id] ){
    						if( is_array( $_POST[$id] ) ) $_POST[$id] = implode(', ', $_POST[$id]);
    						update_usermeta( $user_id, $id, $wpdb->prepare($_POST[$id]));
    					}
    				}
    			}
    		}

    Of course, you should also locate the block of code inside wp_new_user_notification() and remove it to prevent the information for being added twice.

    I realise that this is rather technical. Hopefully the original author can help to implement this changes.

    http://wordpress.org/extend/plugins/register-plus/

Viewing 1 replies (of 1 total)
  • Thanks!! That’s exactly the issue I was having and it didn’t occur to me that the problem was with the data being saved. For anyone else with this problem, a few things I had to figure out from the above instructions.

    1. The file you need to edit is wp-content –> plugins –> register-plus –> register-plus.php

    2. The first block of code posted above comes at line 39. It initially reads

    if($_GET['action'] == 'register')
    add_action( 'login_head', array($this, 'PassHead') );

    Immediately after add

    add_action ('user_register', array($this, 'SaveNewMember'));

    3. The second block of code you can place at what is now line 83 — immediately after you see

    //VERSION CONTROL
    if( $wp_version < 2.5 )
    add_action('admin_notices', array($this, 'version_warning'));
    }

    That’s it. Worked like a charm for me. Thanks again to extrakun for figuring this one out.

Viewing 1 replies (of 1 total)
  • The topic ‘[Plugin: Register Plus] Fix for custom fields/profile fields not being saved at registeration’ is closed to new replies.