注册表插件...电子邮件确认

时间:2015-06-04 作者:pSyToR

大家好,

我正在一个实时站点上尝试我的新用户注册表单插件,但电子邮件没有发送。

我使用以下方法保存新用户:

    if (empty($errors)) {
        $myplugin_newuser = wp_insert_user(array(
            \'user_login\' => $user_login,
            \'user_email\' => $user_email,
            \'nickname\' => $user_nickname,
            \'user_pass\' => $user_pass,
            \'first_name\' => $user_firstname,
            \'last_name\' => $user_lastname,
            \'description\' => $user_bio,
            \'user_url\' => $user_url,
            \'user_registered\' => date(\'Y-m-d H:i:s\'),
            \'role\' => \'subscriber\'
            ));
之后,我按照WordPress的官方方式更改此处的新用户通知:

// Redefine user notification function
if ( !function_exists(\'wp_new_user_notification\') ) {

    function wp_new_user_notification( $user_id, $plaintext_pass = \'\' ) {

        $user = new WP_User( $user_id );

        $user_login = stripslashes( $user->user_login );
        $user_email = stripslashes( $user->user_email );

        $message  = sprintf( __(\'New user registration on %s:\'), get_option(\'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\'), get_option(\'blogname\') ),
            $message
        );

        if ( empty( $plaintext_pass ) )
            return;

        $message  = __(\'Hi there,\') . "\\r\\n\\r\\n";
        $message .= sprintf( __("Welcome to %s! Here\'s how to log in:"), get_option(\'blogname\')) . "\\r\\n\\r\\n";
        $message .= wp_login_url() . "\\r\\n";
        $message .= sprintf( __(\'Username: %s\'), $user_login ) . "\\r\\n";
        $message .= sprintf( __(\'Password: %s\'), $plaintext_pass ) . "\\r\\n\\r\\n";
        $message .= sprintf( __(\'If you have any problems, please contact me at %s.\'), get_option(\'admin_email\') ) . "\\r\\n\\r\\n";
        $message .= __(\'Adios!\');

        wp_mail(
            $user_email,
            sprintf( __(\'[%s] Your username and password\'), get_option(\'blogname\') ),
            $message
        );
    }
}
我知道有人说,如果密码信息没有传递,电子邮件将不会发送给用户,但我似乎也没有收到发送给我的管理员电子邮件的电子邮件。

但根据我对代码的理解,如果给定了“”,则意味着它是空的,但信息是传递的,因此应该发送电子邮件。

我插入新用户的方式是否不正确?还是我遗漏了什么。

测试已经完成,我的WP Mail Bank插件正常发送电子邮件。

为了确保我也尝试调用函数本身,根据上面的行,我正在传递user\\u登录名和user\\u pass信息:

wp_new_user_notification( $user_login, $user_pass);
编辑现在我使用了该功能(修复了四分之一的问题),管理员收到了电子邮件,但没有用户登录名或$user\\u pass的任何详细信息(如上所述,这些都是变量),我使用WordPress发送信息来填充数据库中的信息。

--原始消息--

我在一个网站上试用了我的新注册表单插件(谢谢@PieterGoosen),但在用户点击注册后没有发送电子邮件。

问题是,是否因为我使用了不同的表单,所以没有发送电子邮件?

我在想默认的电子邮件会自动发送?

我必须在插件中设置电子邮件吗?

还是我应该指望WordPress来做?

-----

正如Pieter在评论中提到的,是的,电子邮件正在通过,因为我使用的是一个插件,默认情况下使用SMTP而不是PHP邮件程序(插件名:Wp Mail Bank)

测试是由插件进行的(以确保我的服务器上没有配置更改),我还禁用了插件,并尝试了WordPress正常注册表中的原始电子邮件,我收到了两封电子邮件,没有任何问题。

2 个回复
最合适的回答,由SO网友:pSyToR 整理而成

这个问题与我的插件或任何类型的编码错误都没有关系。

使用W3 Total Cache时,数据库缓存似乎会删除发送给函数的一些数据,因此有关用户名和密码的信息没有发送给函数,从而导致发送给用户的电子邮件无法发送(因为没有为函数提供密码),发送给管理员的电子邮件也没有任何信息。

通过禁用应用程序或仅“数据库缓存”,可以正确发送信息,并按预期方式发送两封电子邮件。

谢谢所有试图帮助我的人。当我从W3 Total Cache团队获得信息时,如果有解决方案或不应该这样做,我将发布更多详细信息。

SO网友:maksbd19

我可能错了,但我认为wp_insert_user 函数不调用wp_new_user_notification 作用编辑时,需要手动调用此函数。

当您在一个实时站点中测试插件时,我假定错误报告已关闭,因此您不会收到任何错误。

if (empty($errors)) {
        $myplugin_newuser = wp_insert_user(array(
            \'user_login\' => $user_login,
            \'user_email\' => $user_email,
            \'nickname\' => $user_nickname,
            \'user_pass\' => $user_pass,
            \'first_name\' => $user_firstname,
            \'last_name\' => $user_lastname,
            \'description\' => $user_bio,
            \'user_url\' => $user_url,
            \'user_registered\' => date(\'Y-m-d H:i:s\'),
            \'role\' => \'subscriber\'
        ));
}

if( !is_wp_error( $myplugin_newuser ) ){
    wp_new_user_notification( $user_login, $user_pass);
}
else{
    // this holds the errors that might be holding you back 
    // $myplugin_newuser->get_error_messages()
}
我认为在插入用户时可能会遇到一些问题,否则您的代码应该可以正常工作。只需检查返回值是否为WP_error.

结束

相关推荐