false, 'registered_profile_link_text' => null, 'registered_profile_link_url' => null, 'redirect' => false, 'redirect_to' => null, 'submit_button_label' => null, 'terms_post_id' => null ); /** * Not stored as user meta. * * @var array */ private static $skip_meta_fields = array( 'user_login', 'user_email', 'user_url', 'user_pass', 'password' ); /** * Returns the keys not stored as user meta. * * @return array */ public static function get_skip_meta_fields() { return self::$skip_meta_fields; } private static $submit_button_label = null; /** * Class initialization. */ public static function init() { // registration form shortcode add_shortcode( 'affiliates_registration', array( __CLASS__, 'affiliates_registration_shortcode' ) ); // delete affiliate when user is deleted add_action( 'deleted_user', array( __CLASS__, 'deleted_user' ) ); } /** * Registration form shortcode handler. * * @param array $atts attributes * @param string $content not used */ public static function affiliates_registration_shortcode( $atts, $content = null ) { $options = shortcode_atts( self::$defaults, $atts ); return self::render_form( $options ); } /** * Registration form. * * @see Affiliates_Registration::$defaults for accepted parameters * * @param array $options form options * @return string rendered registration form */ public static function render_form( $options = array() ) { wp_enqueue_style( 'affiliates' ); self::$submit_button_label = __( 'Sign Up', 'affiliates' ); $output = ''; // // Existing affiliate pending approval // if ( affiliates_user_is_affiliate_status( null, 'pending' ) ) { $output .= '
'; $output .= '

'; $output .= __( 'Your affiliate application is pending approval.', 'affiliates' ); $output .= '

'; $output .= '
'; return $output; } // // Existing affiliate // if ( $is_affiliate = affiliates_user_is_affiliate() ) { $output .= '
'; $output .= '

'; $output .= __( 'You are already registered as an affiliate.', 'affiliates' ); $output .= '

'; if ( isset( $options['registered_profile_link_url'] ) ) { $output .= '

'; $output .= ''; if ( isset( $options['registered_profile_link_text'] ) ) { $output .= wp_filter_kses( $options['registered_profile_link_text'] ); } else { $output .= __( 'Access your profile', 'affiliates' ); } $output .= ''; $output .= '

'; } $output .= '
'; return $output; } // // Registration closed // if ( !get_option( 'aff_registration', get_option( 'users_can_register', false ) ) ) { $output .= '

' . __( 'Registration is currently closed.', 'affiliates' ) . '

'; return $output; } require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings.php'; require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings-registration.php'; $registration_fields = Affiliates_Settings_Registration::get_fields(); // // Gather user info // $user = null; if ( $is_logged_in = is_user_logged_in() ) { $user = wp_get_current_user(); if ( isset( $registration_fields['first_name'] ) && $registration_fields['first_name']['enabled'] ) { $first_name = $user->first_name; $first_name = sanitize_user_field( 'first_name', $first_name, $user->ID, 'display' ); $registration_fields['first_name']['value'] = $first_name; } if ( isset( $registration_fields['last_name'] ) && $registration_fields['last_name']['enabled'] ) { $last_name = $user->last_name; $last_name = sanitize_user_field( 'last_name', $last_name, $user->ID, 'display' ); $registration_fields['last_name']['value'] = $last_name; } if ( isset( $registration_fields['user_login'] ) && $registration_fields['user_login']['enabled'] ) { $user_login = $user->user_login; $user_login = sanitize_user_field( 'user_login', $user_login, $user->ID, 'display' ); $registration_fields['user_login']['value'] = $user_login; } if ( isset( $registration_fields['user_email'] ) && $registration_fields['user_email']['enabled'] ) { $user_email = $user->user_email; $user_email = sanitize_user_field( 'email', $user_email, $user->ID, 'display' ); $registration_fields['user_email']['value'] = $user_email; } if ( isset( $registration_fields['user_url'] ) && $registration_fields['user_url']['enabled'] ) { $url = $user->user_url; $url = sanitize_user_field( 'user_url', $url, $user->ID, 'display' ); $registration_fields['user_url']['value'] = $url; } } $submit_name = 'affiliates-registration-submit'; $nonce = 'affiliates-registration-nonce'; $nonce_action = 'affiliates-registration'; $send = false; $captcha = ''; $error = false; if ( !empty( $_POST[$submit_name] ) ) { if ( !wp_verify_nonce( $_POST[$nonce], $nonce_action ) ) { $error = true; // fail but don't give clues } $captcha = !empty( $_POST[Affiliates_Utility::get_captcha_field_id()] ) ? $_POST[Affiliates_Utility::get_captcha_field_id()] : null; if ( !Affiliates_Utility::captcha_validates( $captcha ) ) { $error = true; // dumbot } // gather field values foreach( $registration_fields as $name => $field ) { if ( $field['enabled'] ) { $value = isset( $_POST[$name] ) ? $_POST[$name] : ''; $value = Affiliates_Utility::filter( $value ); if ( $field['required'] && empty( $value ) ) { $error = true; $output .= '
'; $output .= __( 'ERROR', 'affiliates' ); $output .= ' : '; $output .= sprintf( __( 'Please fill out the field %s.', 'affiliates' ), $field['label'] ); $output .= '
'; } $registration_fields[$name]['value'] = $value; } } $error = apply_filters( 'affiliates_registration_error_validate', $error ); if ( !$error ) { $userdata = array(); foreach( $registration_fields as $name => $field ) { if ( $registration_fields[$name]['enabled'] ) { $userdata[$name] = $registration_fields[$name]['value']; } } // don't try to create a new user on multiple renderings global $affiliate_user_id, $new_affiliate_registered, $stored_affiliate; if ( !isset( $affiliate_user_id ) ) { if ( !$is_logged_in ) { // allow plugins to be aware of new user account being created do_action( 'affiliates_before_register_affiliate', $userdata ); // create the affiliate user account $affiliate_user_id = self::register_affiliate( $userdata ); $new_affiliate_registered = true; do_action( 'affiliates_after_register_affiliate', $userdata ); } else { $affiliate_user_id = $user->ID; $new_affiliate_registered = true; } } // register as affiliate if ( !is_wp_error( $affiliate_user_id ) ) { // add affiliate entry $send = true; if ( !isset( $stored_affiliate ) ) { if ( $new_affiliate_registered ) { $affiliate_id = self::store_affiliate( $affiliate_user_id, $userdata ); // update user including meta self::update_affiliate_user( $affiliate_user_id, $userdata ); do_action( 'affiliates_stored_affiliate', $affiliate_id, $affiliate_user_id ); } $stored_affiliate = true; } $is_widget = isset( $options['is_widget'] ) && ( $options['is_widget'] === true || $options['is_widget'] == 'true' ); $redirect = isset( $options['redirect'] ) && ( $options['redirect'] === true || $options['redirect'] == 'true' ); $redirect_url = empty( $_REQUEST['redirect_to'] ) ? apply_filters( 'affiliates_registration_login_redirect_url', get_home_url( get_current_blog_id(), 'wp-login.php?checkemail=confirm' ) ) : $_REQUEST['redirect_to']; if ( $redirect && !$is_widget && !headers_sent() ) { wp_safe_redirect( $redirect_url ); exit(); } else { $output .= apply_filters( 'affiliates_thanks_sign_up_text', '

' . esc_html__( 'Thanks for signing up!', 'affiliates' ) . '

' ); if ( !$is_logged_in ) { $output .= apply_filters( 'affiliates_check_confirmation_text', '

' . esc_html__( 'Please check your email for the confirmation link.', 'affiliates' ) . '

' ); if ( $redirect && !$is_widget ) { $output .= ''; } else { $show_login = isset( $options['show_login'] ) ? $options['show_login'] : false; switch ( $show_login ) { case true : case 'true' : case 'yes' : $show_login = true; break; default : $show_login = false; } if ( $show_login ) { $login_url = !empty( $options['login_url'] ) ? $options['login_url'] : get_home_url( get_current_blog_id(), 'wp-login.php?checkemail=confirm' ); $login_url = apply_filters( 'affiliates_registration_login_redirect_url', $login_url ); $output .= '

'; $output .= wp_kses( sprintf( __( 'Log in here.', 'affiliates' ), esc_url( $login_url ) ), array( 'a' => array( 'href' => array() ) ) ); $output .= '

'; } } } else { if ( isset( $options['registered_profile_link_url'] ) ) { $output .= '

'; $output .= ''; if ( isset( $options['registered_profile_link_text'] ) ) { $output .= wp_filter_kses( $options['registered_profile_link_text'] ); } else { $output .= esc_html__( 'Access your profile', 'affiliates' ); } $output .= ''; $output .= '

'; } } } } else { // is_wp_error( $affiliate_user_id ), user registration failed $error = true; $wp_error = $affiliate_user_id; if ( $wp_error->get_error_code() ) { $errors = array(); $messages = array(); foreach ( $wp_error->get_error_codes() as $code ) { $severity = $wp_error->get_error_data( $code ); foreach ( $wp_error->get_error_messages( $code ) as $error ) { if ( 'message' == $severity ) { $messages[] = $error; } else { $errors[] = $error; } } } if ( !empty( $errors ) ) { $output .= '
'; $output .= apply_filters( 'login_errors', implode( '
', $errors ) ); $output .= '
'; } if ( !empty( $messages ) ) { $output .= '
'; $output .= apply_filters( 'login_messages', implode( '
', $messages ) ); $output .= '
'; } } } } } // Registration form if ( !$send ) { $terms_post_id = get_option( 'aff_registration_terms_post_id', '' ); if ( !empty( $terms_post_id ) || isset( $options['terms_post_id'] ) ) { if ( empty( $terms_post_id ) ) { $terms_post_id = $options['terms_post_id']; } $terms_post = get_post( $terms_post_id ); if ( $terms_post ) { $terms_post_link = '' . get_the_title( $terms_post->ID ) . ''; $terms = sprintf( apply_filters( 'affiliates_terms_post_link_text', __( 'By signing up, you indicate that you have read and agree to the %s.', 'affiliates' ) ), $terms_post_link ); } } $output .= '
'; $output .= ''; $output .= '
'; $output .= '
'; $output .= apply_filters( 'affiliates_registration_before_fields', '' ); $output .= self::render_fields( $registration_fields ); $output .= apply_filters( 'affiliates_registration_after_fields', '' ); if ( isset( $terms ) ) { $output .= '
' . $terms . '
'; } $output .= Affiliates_Utility::captcha_get( $captcha ); $output .= wp_nonce_field( $nonce_action, $nonce, true, false ); if ( isset( $options['redirect_to'] ) ) { $output .= ''; } $output .= ''; $output .= '
'; $output .= '
'; $output .= '
'; } return $output; } /** * Renders the registration form fields. * * @return string */ public static function render_fields( $registration_fields = null ) { $output = ''; require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings.php'; require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings-registration.php'; if ( $registration_fields === null ) { $registration_fields = Affiliates_Settings_Registration::get_fields(); } foreach( $registration_fields as $name => $field ) { if ( $field['enabled'] ) { $output .= '
'; $output .= ''; $output .= '
'; } } return $output; } /** * Register a new affiliate user. * * @param array $userdata * @return int|WP_Error Either user's ID or error on failure. */ public static function register_affiliate( $userdata ) { $errors = new WP_Error(); $user_email = apply_filters( 'user_registration_email', $userdata['user_email'] ); if ( isset( $userdata['user_login'] ) ) { $sanitized_user_login = sanitize_user( $userdata['user_login'] ); } else { $sanitized_user_login = sanitize_user( $user_email ); } // Check the username if ( $sanitized_user_login == '' ) { $errors->add( 'empty_username', __( 'ERROR: Please enter a username.', 'affiliates' ) ); } elseif ( ! validate_username( $sanitized_user_login ) ) { $errors->add( 'invalid_username', __( 'ERROR: This username is invalid because it uses illegal characters. Please enter a valid username.', 'affiliates' ) ); $sanitized_user_login = ''; } elseif ( username_exists( $sanitized_user_login ) ) { $errors->add( 'username_exists', __( 'ERROR: This username is already registered, please choose another one.', 'affiliates' ) ); } // Check the e-mail address if ( $user_email == '' ) { $errors->add( 'empty_email', __( 'ERROR: Please type your e-mail address.', 'affiliates' ) ); } elseif ( ! is_email( $user_email ) ) { $errors->add( 'invalid_email', __( 'ERROR: The email address isn’t correct.', 'affiliates' ) ); $user_email = ''; } elseif ( email_exists( $user_email ) ) { $errors->add( 'email_exists', __( 'ERROR: This email is already registered, please choose another one.', 'affiliates' ) ); } do_action( 'register_post', $sanitized_user_login, $user_email, $errors ); $errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email ); if ( $errors->get_error_code() ) { return $errors; } // use user-provided password if present if ( !empty( $userdata['password'] ) ) { $user_pass = $userdata['password']; } else { $user_pass = wp_generate_password( AFFILIATES_REGISTRATION_PASSWORD_LENGTH, false ); } $userdata['first_name'] = sanitize_text_field( $userdata['first_name'] ); $userdata['last_name'] = sanitize_text_field( $userdata['last_name'] ); $userdata['user_login'] = $sanitized_user_login; $userdata['user_email'] = $user_email; $userdata['password'] = $user_pass; if ( !empty( $userdata['user_url'] ) ) { $userdata['user_url'] = esc_url_raw( $userdata['user_url'] ); $userdata['user_url'] = preg_match( '/^(https?|ftps?|mailto|news|irc|gopher|nntp|feed|telnet):/is', $userdata['user_url'] ) ? $userdata['user_url'] : 'http://' . $userdata['user_url']; } // create affiliate entry $user_id = self::create_affiliate( $userdata ); if ( ! $user_id ) { $errors->add( 'registerfail', sprintf( __( 'ERROR: Couldn’t register you... please contact the webmaster !' ), get_option( 'admin_email' ) ) ); return $errors; } update_user_option( $user_id, 'default_password_nag', true, true ); //Set up the Password change nag. // notify new user self::new_user_notification( $user_id, $user_pass ); return $user_id; } /** * Updates an affiliate user. * * @access private * @param array $userdata * @return int|WP_Error Either user's ID or error on failure. */ public static function update_affiliate_user( $user_id, $userdata ) { global $wpdb, $affiliates_update_affiliate_user; if ( !isset( $affiliates_update_affiliate_user ) ) { $affiliates_update_affiliate_user = true; } else { return; } $errors = new WP_Error(); if ( ( $user = get_user_by( 'id', $user_id ) ) && affiliates_user_is_affiliate( $user_id ) ) { $new_password = false; $user_email = apply_filters( 'user_registration_email', $userdata['user_email'] ); // Check the e-mail address if ( $user_email == '' ) { $errors->add( 'empty_email', __( 'ERROR: Please type your e-mail address.', 'affiliates' ) ); } elseif ( ! is_email( $user_email ) ) { $errors->add( 'invalid_email', __( 'ERROR: The email address isn’t correct.', 'affiliates' ) ); $user_email = ''; } elseif ( $other_user_id = email_exists( $user_email ) ) { if ( $other_user_id != $user_id ) { $errors->add( 'email_exists', __( 'ERROR: This email is already registered, please choose another one.', 'affiliates' ) ); } } if ( $errors->get_error_code() ) { return $errors; } $userdata['first_name'] = sanitize_text_field( $userdata['first_name'] ); $userdata['last_name'] = sanitize_text_field( $userdata['last_name'] ); $userdata['user_email'] = $user_email; if ( !empty( $userdata['user_url'] ) ) { $userdata['user_url'] = esc_url_raw( $userdata['user_url'] ); $userdata['user_url'] = preg_match( '/^(https?|ftps?|mailto|news|irc|gopher|nntp|feed|telnet):/is', $userdata['user_url'] ) ? $userdata['user_url'] : 'http://' . $userdata['user_url']; } // update affiliate user and affiliate entry $_userdata = array( 'ID' => $user_id, 'first_name' => esc_sql( $userdata['first_name'] ), 'last_name' => esc_sql( $userdata['last_name'] ), 'user_email' => esc_sql( $userdata['user_email'] ), ); if ( !empty( $userdata['password'] ) ) { // Don't pass the new password through wp_update_user as we risk // sending headers again when wp_update_user() clears the cookies while // the new password is set. Instead, we set the new password here and // only update the other user data below. $new_password = true; wp_set_password( $userdata['password'], $user_id ); } if ( isset( $userdata['user_url'] ) ) { $_userdata['user_url'] = esc_sql( $userdata['user_url'] ); } // update user and affiliate entry $user_id = wp_update_user( $_userdata ); // if WP_Error it's returned below if ( !is_wp_error( $user_id ) ) { // add user meta from remaining fields foreach( $userdata as $meta_key => $meta_value ) { if ( !key_exists( $meta_key, $_userdata ) && ( !in_array( $meta_key, self::$skip_meta_fields) ) ) { update_user_meta( $user_id, $meta_key, maybe_unserialize( $meta_value ) ); } } // update affiliate entry $affiliate_ids = affiliates_get_user_affiliate( $user_id ); if ( $affiliate_id = array_shift( $affiliate_ids ) ) { $affiliates_table = _affiliates_get_tablename( 'affiliates' ); $query = $wpdb->prepare( "UPDATE $affiliates_table SET name = %s, email = %s WHERE affiliate_id = %d", $_userdata['first_name'] . ' ' . $_userdata['last_name'], $_userdata['user_email'], intval( $affiliate_id ) ); if ( $wpdb->query( $query ) ) { do_action( 'affiliates_updated_affiliate', $affiliate_id ); } } // @todo headers already sent notices with WC when password is changed ... for example // wp_woocommerce_session_... cookie cannot be set - headers already sent by .../wp-content/themes/twentytwelve/header.php on line 13 in .../wp-content/plugins/woocommerce/includes/wc-core-functions.php on line 469 // below doesn't solve this and we don't want to force logout/login on password change anyway // if ( $new_password ) { // $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; // wp_redirect( wp_login_url( $current_url ) ); // exit; // } } } return $user_id; } /** * Create an affiliate user. * * @param array $userdata * @return int|WP_Error user ID or error */ public static function create_affiliate( $userdata ) { $_userdata = array( 'first_name' => esc_sql( $userdata['first_name'] ), 'last_name' => esc_sql( $userdata['last_name'] ), 'user_login' => esc_sql( $userdata['user_login'] ), 'user_email' => esc_sql( $userdata['user_email'] ), 'user_pass' => esc_sql( $userdata['password'] ) ); if ( isset( $userdata['user_url'] ) ) { $_userdata['user_url'] = esc_sql( $userdata['user_url'] ); } global $create_affiliate_userdata; $create_affiliate_userdata = $userdata; $user_id = wp_insert_user( $_userdata ); if ( !is_wp_error( $user_id ) ) { // add user meta from remaining fields foreach( $userdata as $meta_key => $meta_value ) { if ( !key_exists( $meta_key, $_userdata ) && ( !in_array( $meta_key, self::$skip_meta_fields) ) ) { add_user_meta( $user_id, $meta_key, maybe_unserialize( $meta_value ) ); } } } return $user_id; } /** * Creates an affiliate entry and relates it to a user. * Notifies site admin of affiliate registration. * * @param int $user_id user id * @param array $userdata affiliate data * @param string $status affiliate status * @return int|boolean if successful new affiliate's id, otherwise false */ public static function store_affiliate( $user_id, $userdata, $status = null ) { global $wpdb; $result = false; $affiliates_table = _affiliates_get_tablename( 'affiliates' ); $today = date( 'Y-m-d', time() ); $name = $userdata['first_name'] . " " . $userdata['last_name']; $email = $userdata['user_email']; $data = array( 'name' => esc_sql( $name ), 'email' => esc_sql( $email ), 'from_date' => esc_sql( $today ), ); $formats = array( '%s', '%s', '%s' ); // pending affiliate status? switch( $status ) { case 'active' : case 'pending' : $affiliate_status = $status; break; default : $affiliate_status = get_option( 'aff_status', 'active' ); } if ( $affiliate_status == 'pending' ) { $data['status'] = 'pending'; $formats[] = '%s'; } if ( $wpdb->insert( $affiliates_table, $data, $formats ) ) { $affiliate_id = $wpdb->get_var( "SELECT LAST_INSERT_ID()" ); // create association if ( $wpdb->insert( _affiliates_get_tablename( 'affiliates_users' ), array( 'affiliate_id' => $affiliate_id, 'user_id' => $user_id ), array( '%d', '%d' ) ) ) { $result = $affiliate_id; self::new_affiliate_notification( $user_id ); } // hook if ( !empty( $affiliate_id ) ) { do_action( 'affiliates_added_affiliate', intval( $affiliate_id ) ); } } return $result; } /** * Hooked on delete_user to mark affiliate as deleted. * Note that the affiliate-user association is maintained. * @param int $user_id */ public static function deleted_user( $user_id ) { global $wpdb; $affiliates_table = _affiliates_get_tablename( 'affiliates' ); $affiliates_users_table = _affiliates_get_tablename( 'affiliates_users' ); if ( $affiliate_user = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $affiliates_users_table WHERE user_id = %d", intval( $user_id ) ) ) ) { $affiliate_id = $affiliate_user->affiliate_id; $valid_affiliate = false; // do not mark the pseudo-affiliate as deleted: type != ... $check = $wpdb->prepare( "SELECT affiliate_id FROM $affiliates_table WHERE affiliate_id = %d AND (type IS NULL OR type != '" . AFFILIATES_DIRECT_TYPE . "')", intval( $affiliate_id ) ); if ( $wpdb->query( $check ) ) { $valid_affiliate = true; } if ( $valid_affiliate ) { // mark the affiliate as deleted - will go through and also // clean up the association even if the affiliate was already // marked as deleted $wpdb->query( $query = $wpdb->prepare( "UPDATE $affiliates_table SET status = 'deleted' WHERE affiliate_id = %d", intval( $affiliate_id ) ) ); do_action( 'affiliates_deleted_affiliate', intval( $affiliate_id ) ); // the user is removed from the users table, it wouldn't make sense to maintain // a dangling reference to a non-existent user so release the association as well $wpdb->query( $query = $wpdb->prepare( "DELETE FROM $affiliates_users_table WHERE affiliate_id = %d AND user_id = %d", intval( $affiliate_id ), intval( $user_id ) ) ); } } } /** * Notify the blog admin of a new affiliate. * * @param int $user_id User ID */ public static function new_affiliate_notification( $user_id ) { $user = new WP_User( $user_id ); $user_login = stripslashes( $user->user_login ); $user_email = stripslashes( $user->user_email ); // The blogname option is escaped with esc_html on the way into the database in sanitize_option // we want to reverse this for the plain text arena of emails. $blogname = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ); $message = sprintf( __( 'New affiliate registration on your site %s:', 'affiliates' ), $blogname ) . "\r\n\r\n"; $message .= sprintf( __( 'Username: %s', 'affiliates' ), $user_login ) . "\r\n\r\n"; $message .= sprintf( __( 'E-mail: %s', 'affiliates' ), $user_email ) . "\r\n"; if ( get_option( 'aff_notify_admin', true ) ) { $params = array( 'user_id' => $user_id, 'user' => $user, 'username' => $user->user_login, 'site_login_url' => wp_login_url(), 'blogname' => $blogname ); @wp_mail( apply_filters( 'affiliates_admin_email', get_option( 'admin_email' ) ), apply_filters( 'affiliates_new_affiliate_registration_subject', sprintf( __( '[%s] New Affiliate Registration', 'affiliates' ), $blogname ), $params ), apply_filters( 'affiliates_new_affiliate_registration_message', $message, $params ), apply_filters( 'affiliates_new_affiliate_registration_headers', '', $params ) ); } } /** * Notify of new user creation for an affiliate. * * @param int $user_id User ID. * @param string $plaintext_pass Optional. The user's plaintext password. Default empty. */ public static function new_user_notification( $user_id, $plaintext_pass = '' ) { $user = get_userdata( $user_id ); $blogname = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ); if ( !empty( $plaintext_pass ) ) { if ( get_option( 'aff_notify_affiliate_user', 'yes' ) != 'no' ) { $message = sprintf( __( 'Username: %s', 'affiliates' ), $user->user_login) . "\r\n"; $message .= sprintf( __( 'Password: %s', 'affiliates' ), $plaintext_pass ) . "\r\n"; $message .= wp_login_url() . "\r\n"; $params = array( 'user_id' => $user_id, 'user' => $user, 'username' => $user->user_login, 'password' => $plaintext_pass, 'site_login_url' => wp_login_url(), 'blogname' => $blogname ); @wp_mail( $user->user_email, apply_filters( 'affiliates_new_affiliate_user_registration_subject', sprintf( __( '[%s] Your username and password', 'affiliates' ), $blogname ), $params ), apply_filters( 'affiliates_new_affiliate_user_registration_message', $message, $params ), apply_filters( 'affiliates_new_affiliate_user_registration_headers', '', $params ) ); } } } } Affiliates_Registration::init();