• Resolved webfreak1364

    (@webfreak1364)


    Hi,

    I try to override a function in pluggable.php, but somehow WordPress then ignores both functions. I want to modify the E-Mail sent out to a user after initial registration (the one with the link to the password).
    If I implement the code, it won’t send the email anymore.

    Here’s my code, any help is very appreciated.
    Thanks a lot.

    if (!function_exists('wp_new_user_notification')){
    	function wp_new_user_notification( $user_id, $deprecated = null, $notify = '' ) {
    		if ( $deprecated !== null ) {
    			_deprecated_argument( __FUNCTION__, '4.3.1' );
    		}
    
    		global $wpdb, $wp_hasher;
    		$user = get_userdata( $user_id );
    
    		// 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);
    
    		if ( 'user' !== $notify ) {
    			$switched_locale = switch_to_locale( get_locale() );
    
    			/* translators: %s: site title */
    			$message  = sprintf( __( 'New user registration on your site %s:' ), $blogname ) . "\r\n\r\n";
    			/* translators: %s: user login */
    			$message .= sprintf( __( 'Username: %s' ), $user->user_login ) . "\r\n\r\n";
    			/* translators: %s: user email address */
    			$message .= sprintf( __( 'Email: %s' ), $user->user_email ) . "\r\n";
    
    			$wp_new_user_notification_email_admin = array(
    				'to'      => get_option( 'admin_email' ),
    				/* translators: Password change notification email subject. %s: Site title */
    				'subject' => __( '[%s] New User Registration' ),
    				'message' => $message,
    				'headers' => '',
    			);
    
    			/**
    			 * Filters the contents of the new user notification email sent to the site admin.
    			 *
    			 * @since 4.9.0
    			 *
    			 * @param array   $wp_new_user_notification_email {
    			 *     Used to build wp_mail().
    			 *
    			 *     @type string $to      The intended recipient - site admin email address.
    			 *     @type string $subject The subject of the email.
    			 *     @type string $message The body of the email.
    			 *     @type string $headers The headers of the email.
    			 * }
    			 * @param WP_User $user     User object for new user.
    			 * @param string  $blogname The site title.
    			 */
    			$wp_new_user_notification_email_admin = apply_filters( 'wp_new_user_notification_email_admin', $wp_new_user_notification_email_admin, $user, $blogname );
    
    			@wp_mail(
    				$wp_new_user_notification_email_admin['to'],
    				wp_specialchars_decode( sprintf( $wp_new_user_notification_email_admin['subject'], $blogname ) ),
    				$wp_new_user_notification_email_admin['message'],
    				$wp_new_user_notification_email_admin['headers']
    			);
    
    			if ( $switched_locale ) {
    				restore_previous_locale();
    			}
    		}
    
    		// $deprecated was pre-4.3 '$plaintext_pass'. An empty '$plaintext_pass' didn't sent a user notification.
    		if ( 'admin' === $notify || ( empty( $deprecated ) && empty( $notify ) ) ) {
    			return;
    		}
    
    		// Generate something random for a password reset key.
    		$key = wp_generate_password( 20, false );
    
    		/** This action is documented in wp-login.php */
    		do_action( 'retrieve_password_key', $user->user_login, $key );
    
    		// Now insert the key, hashed, into the DB.
    		if ( empty( $wp_hasher ) ) {
    			require_once ABSPATH . WPINC . '/class-phpass.php';
    			$wp_hasher = new PasswordHash( 8, true );
    		}
    		$hashed = time() . ':' . $wp_hasher->HashPassword( $key );
    		$wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user->user_login ) );
    
    		$switched_locale = switch_to_locale( get_user_locale( $user ) );
    
    		/* translators: %s: user login */
    		$message .= __('Willkommen bei FIT Wien.') . "\r\n\r\n";
    		$message = sprintf(__('Dein Benutzername: %s'), $user->user_login) . "\r\n\r\n";
    		$message .= __('Um dein Passwort zu setzen und damit deine Registrierung abzuschlie?en, klicke bitte auf den folgenden Link:') . "\r\n\r\n";
    		$message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . "\r\n\r\n";
    		$message .= __('Um dich zukünftig einzuloggen benutze bitte diesen Link:' . "\r\n\r\n");
    		$message .= wp_login_url() . "\r\n";
    
    		$wp_new_user_notification_email = array(
    			'to'      => $user->user_email,
    			/* translators: Password change notification email subject. %s: Site title */
    			'subject' => __( '[%s] Your username and password info' ),
    			'message' => $message,
    			'headers' => '',
    		);
    	}
    }
    • This topic was modified 7 years, 2 months ago by webfreak1364.
    • This topic was modified 7 years, 2 months ago by bcworkz. Reason: code fixed - cannot use backticks as quotes

    The page I need help with: [log in to see the link]

Viewing 2 replies - 1 through 2 (of 2 total)
  • Moderator bcworkz

    (@bcworkz)

    Your code only notifies the site admin, there is no wp_mail() call near the end to email the new user his login credentials. I suggest you convert the assignment to $wp_new_user_notification_email into a wp_mail() call. There’s nothing to gain by consolidating the arguments into an array, since wp_mail() takes the individual elements as separate arguments.

    Thread Starter webfreak1364

    (@webfreak1364)

    Thanks a lot. I figured the rest of it out, that it works.

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘Redefining functions from pluggable.php’ is closed to new replies.