为什么WP_NEW_USER_NOTIFICATION不工作?

时间:2011-11-18 作者:imuya ayumi

我不喜欢使用插件,所以我使用了user registration 自定义注册页面,不发送任何电子邮件。

起初一切正常。然后,我添加了一些功能来更改“发件人”和“电子邮件”,使用wp_mail_from, 这很有效。然后我决定通过在wp_new_user_notification. 然后它就不再发送任何电子邮件了。

以下是整个模板代码:

`

<?php require_once(ABSPATH . WPINC . \'/registration.php\');

    /* Check if users can register. */
    $registration = get_option( \'users_can_register\' );

    /* If user registered, input info. */
    if ( \'POST\' == $_SERVER[\'REQUEST_METHOD\'] && !empty( $_POST[\'action\'] ) && $_POST[\'action\'] == \'adduser\' ) {
        $user_pass = wp_generate_password();
        $userdata = array(
            \'user_pass\' => $user_pass,
            \'user_login\' => esc_attr( $_POST[\'user_name\'] ),
            \'first_name\' => esc_attr( $_POST[\'first_name\'] ),
            \'last_name\' => esc_attr( $_POST[\'last_name\'] ),
            \'user_email\' => esc_attr( $_POST[\'email\'] ),
        );

        function make_blog_name_from_name($name) {
                return \'RNA Administrator\';
                }
                add_filter(\'wp_mail_from_name\', \'make_blog_name_from_name\');

        function from_mail($content_type){
                    return \'[email protected]\';
                }
                add_filter(\'wp_mail_from\',\'from_mail\');

        if ( !$userdata[\'user_login\'] )
            $error = __(\'A username is required for registration.\', \'frontendprofile\');
        elseif ( username_exists($userdata[\'user_login\']) )
            $error = __(\'Sorry, that username already exists!\', \'frontendprofile\');

        elseif ( !is_email($userdata[\'user_email\'], true) )
            $error = __(\'You must enter a valid email address.\', \'frontendprofile\');
        elseif ( email_exists($userdata[\'user_email\']) )
            $error = __(\'Sorry, that email address is already used!\', \'frontendprofile\');

    else{
            $new_user = wp_insert_user( $userdata );
            if ( !function_exists(\'wp_new_user_notification\') ) {
            function wp_new_user_notification($user_id, $plaintext_pass){

                $new_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 user registration on your site %s:\'), $blogname) . "\\r\\n\\r\\n";
                $message .= sprintf(__(\'Username: %s\'), $user_login) . "\\r\\n\\r\\n";
                $message .= sprintf(__(\'E-mail: %s\'), $user_email) . "\\r\\n";

                @wp_mail(get_option(\'admin_email\'), sprintf(__(\'[%s] New User Registration\'), $blogname), $message);

                if ( empty($plaintext_pass) )
                    return;

                $message  = sprintf(__(\'Username: %s\'), $user_login) . "\\r\\n";
                $message .= sprintf(__(\'Password: %s\'), $plaintext_pass) . "\\r\\n";
                $message .= "Thank you";

                wp_mail($user_email, sprintf(__(\'[%s] Your username and password\'), $blogname), $message);

            }   
            }

        }

    }

    // calling the header.php
    get_header();?>

    <div id="container">
        <div id="content">
                <div class="entry-content">
                </div>
            <!-- REGISTER FORM STARTS HERE -->

        <?php if ( is_user_logged_in() && !current_user_can( \'create_users\' ) ) : ?>

            <p class="log-in-out alert">
            <?php printf( __(\'You are logged in as <a href="%1$s" title="%2$s">%2$s</a>.  You don\\\'t need another account.\', \'frontendprofile\'), get_author_posts_url( $curauth->ID ), $user_identity ); ?> <a href="<?php echo wp_logout_url( get_permalink() ); ?>" title="<?php _e(\'Log out of this account\', \'frontendprofile\'); ?>"><?php _e(\'Logout &raquo;\', \'frontendprofile\'); ?></a>
            </p><!-- .log-in-out .alert -->

        <?php elseif ( $new_user ) : ?>

            <p class="alert">
            <?php
                if ( current_user_can( \'create_users\' ) )
                    printf( __(\'A user account for %1$s has been created.\', \'frontendprofile\'), $_POST[\'user-name\'] );
                else 
                    printf( __(\'Thank you for registering, %1$s.\', \'frontendprofile\'), $_POST[\'user-name\'] );
                    printf( __(\'<br/>Please check your email address. That\\\'s where you\\\'ll recieve your login password.<br/> (It might go into your spam folder)\', \'frontendprofile\') );
            ?>
            </p><!-- .alert -->

        <?php else : ?>

            <?php if ( $error ) : ?>
                <p class="error">
                    <?php echo $error; ?>
                </p><!-- .error -->
            <?php endif; ?>

            <?php if ( current_user_can( \'create_users\' ) && $registration ) : ?>
                <p class="alert">
                    <?php _e(\'Users can register themselves or you can manually create users here.\', \'frontendprofile\'); ?>
                </p><!-- .alert -->
            <?php elseif ( current_user_can( \'create_users\' ) ) : ?>
                <p class="alert">
                    <?php _e(\'Users cannot currently register themselves, but you can manually create users here.\', \'frontendprofile\'); ?>
                </p><!-- .alert -->
            <?php endif; ?>

            <?php if ( $registration || current_user_can( \'create_users\' ) ) : ?>

            <form method="post" id="adduser" class="user-forms" action="http://<?php echo $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\']; ?>">


                <strong>Name</strong>

                <p class="form-username">
                    <label for="user_name"><?php _e(\'Username (required)\', \'frontendprofile\'); ?></label>
                    <input class="text-input" name="user_name" type="text" id="user_name" value="<?php if ( $error ) echo wp_specialchars( $_POST[\'user_name\'], 1 ); ?>" />
                </p><!-- .form-username -->

                <p class="first_name">
                    <label for="first_name"><?php _e(\'First Name\', \'frontendprofile\'); ?></label>
                    <input class="text-input" name="first_name" type="text" id="first_name" value="<?php if ( $error ) echo wp_specialchars( $_POST[\'first_name\'], 1 ); ?>" />
                </p><!-- .first_name -->

                <p class="last_name">
                    <label for="last_name"><?php _e(\'Last Name\', \'frontendprofile\'); ?></label>
                    <input class="text-input" name="last_name" type="text" id="last_name" value="<?php if ( $error ) echo wp_specialchars( $_POST[\'last_name\'], 1 ); ?>" />
                </p><!-- .last_name -->

                <strong>Contact Info</strong>

                <p class="form-email">
                    <label for="email"><?php _e(\'E-mail (required)\', \'frontendprofile\'); ?></label>
                    <input class="text-input" name="email" type="text" id="email" value="<?php if ( $error ) echo wp_specialchars( $_POST[\'email\'], 1 ); ?>" />
                </p><!-- .form-email -->

                <p class="form-submit">
                    <?php echo $referer; ?>
                    <input name="adduser" type="submit" id="addusersub" class="submit button" value="<?php if ( current_user_can( \'create_users\' ) ) _e(\'Add User\', \'frontendprofile\'); else _e(\'Register\', \'frontendprofile\'); ?>" />
                    <?php wp_nonce_field( \'add-user\' ) ?>
                    <input name="action" type="hidden" id="action" value="adduser" />
                </p><!-- .form-submit -->

            </form><!-- #adduser -->

            <?php endif; ?>

        <?php endif; ?>

<!-- REGISTER FORM ENDS HERE -->`

1 个回复
SO网友:Joshua Abenazer

请尝试此代码。我已经从代码中删除了wp\\u new\\u user\\u通知函数的新声明,因为只有将其放入插件中时,它才会考虑新函数。这就是优先考虑的方式。

<?php
/* Check if users can register. */
$registration = get_option( \'users_can_register\' );

/* If user registered, input info. */
if ( \'POST\' == $_SERVER[\'REQUEST_METHOD\'] && !empty( $_POST[\'action\'] ) && $_POST[\'action\'] == \'adduser\' ) {
    $user_pass = wp_generate_password();
    $userdata = array(
        \'user_pass\' => $user_pass,
        \'user_login\' => esc_attr( $_POST[\'user_name\'] ),
        \'first_name\' => esc_attr( $_POST[\'first_name\'] ),
        \'last_name\' => esc_attr( $_POST[\'last_name\'] ),
        \'user_email\' => esc_attr( $_POST[\'email\'] ),
    );

    function make_blog_name_from_name($name) {
            return \'RNA Administrator\';
            }
            add_filter(\'wp_mail_from_name\', \'make_blog_name_from_name\');

    function from_mail($content_type){
                return \'[email protected]\';
            }
            add_filter(\'wp_mail_from\',\'from_mail\');

    if ( !$userdata[\'user_login\'] )
        $error = __(\'A username is required for registration.\', \'frontendprofile\');
    elseif ( username_exists($userdata[\'user_login\']) )
        $error = __(\'Sorry, that username already exists!\', \'frontendprofile\');

    elseif ( !is_email($userdata[\'user_email\']) )
        $error = __(\'You must enter a valid email address.\', \'frontendprofile\');
    elseif ( email_exists($userdata[\'user_email\']) )
        $error = __(\'Sorry, that email address is already used!\', \'frontendprofile\');

else{
        $new_user = wp_insert_user( $userdata );

        wp_new_user_notification($new_user, $user_pass);

    }

}

// calling the header.php
get_header();?>

<div id="container">
    <div id="content">
            <div class="entry-content">
            </div>
        <!-- REGISTER FORM STARTS HERE -->

    <?php if ( is_user_logged_in() && !current_user_can( \'create_users\' ) ) : ?>

        <p class="log-in-out alert">
        <?php printf( __(\'You are logged in as <a href="%1$s" title="%2$s">%2$s</a>.  You don\\\'t need another account.\', \'frontendprofile\'), get_author_posts_url( $curauth->ID ), $user_identity ); ?> <a href="<?php echo wp_logout_url( get_permalink() ); ?>" title="<?php _e(\'Log out of this account\', \'frontendprofile\'); ?>"><?php _e(\'Logout &raquo;\', \'frontendprofile\'); ?></a>
        </p><!-- .log-in-out .alert -->

    <?php elseif ( @$new_user ) : ?>

        <p class="alert">
        <?php
            if ( current_user_can( \'create_users\' ) )
                printf( __(\'A user account for %1$s has been created.\', \'frontendprofile\'), $_POST[\'user_name\'] );
            else 
                printf( __(\'Thank you for registering, %1$s.\', \'frontendprofile\'), $_POST[\'user-name\'] );
                printf( __(\'<br/>Please check your email address. That\\\'s where you\\\'ll recieve your login password.<br/> (It might go into your spam folder)\', \'frontendprofile\') );
        ?>
        </p><!-- .alert -->

    <?php else : ?>

        <?php if ( $error ) : ?>
            <p class="error">
                <?php echo $error; ?>
            </p><!-- .error -->
        <?php endif; ?>

        <?php if ( current_user_can( \'create_users\' ) && $registration ) : ?>
            <p class="alert">
                <?php _e(\'Users can register themselves or you can manually create users here.\', \'frontendprofile\'); ?>
            </p><!-- .alert -->
        <?php elseif ( current_user_can( \'create_users\' ) ) : ?>
            <p class="alert">
                <?php _e(\'Users cannot currently register themselves, but you can manually create users here.\', \'frontendprofile\'); ?>
            </p><!-- .alert -->
        <?php endif; ?>

        <?php if ( $registration || current_user_can( \'create_users\' ) ) : ?>

        <form method="post" id="adduser" class="user-forms" action="http://<?php echo $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\']; ?>">


            <strong>Name</strong>

            <p class="form-username">
                <label for="user_name"><?php _e(\'Username (required)\', \'frontendprofile\'); ?></label>
                <input class="text-input" name="user_name" type="text" id="user_name" value="<?php if ( $error ) echo wp_specialchars( $_POST[\'user_name\'], 1 ); ?>" />
            </p><!-- .form-username -->

            <p class="first_name">
                <label for="first_name"><?php _e(\'First Name\', \'frontendprofile\'); ?></label>
                <input class="text-input" name="first_name" type="text" id="first_name" value="<?php if ( $error ) echo wp_specialchars( $_POST[\'first_name\'], 1 ); ?>" />
            </p><!-- .first_name -->

            <p class="last_name">
                <label for="last_name"><?php _e(\'Last Name\', \'frontendprofile\'); ?></label>
                <input class="text-input" name="last_name" type="text" id="last_name" value="<?php if ( $error ) echo wp_specialchars( $_POST[\'last_name\'], 1 ); ?>" />
            </p><!-- .last_name -->

            <strong>Contact Info</strong>

            <p class="form-email">
                <label for="email"><?php _e(\'E-mail (required)\', \'frontendprofile\'); ?></label>
                <input class="text-input" name="email" type="text" id="email" value="<?php if ( $error ) echo wp_specialchars( $_POST[\'email\'], 1 ); ?>" />
            </p><!-- .form-email -->

            <p class="form-submit">
                <input name="adduser" type="submit" id="addusersub" class="submit button" value="<?php if ( current_user_can( \'create_users\' ) ) _e(\'Add User\', \'frontendprofile\'); else _e(\'Register\', \'frontendprofile\'); ?>" />
                <?php wp_nonce_field( \'add-user\' ) ?>
                <input name="action" type="hidden" id="action" value="adduser" />
            </p><!-- .form-submit -->

        </form><!-- #adduser -->

        <?php endif; ?>

    <?php endif; ?>

结束

相关推荐