0

我已经在 WP 中实现了一个自定义登录和注册表单,如此所述。用户现在可以注册但不能登录,直到管理员从后端批准该用户。

我需要为新用户注册实施管理员通知电子邮件,并且用户通知电子邮件管理员从后端批准它。我在注册表单中尝试了以下代码来发送电子邮件,但这似乎不起作用。此外,标准电子邮件不断发送。

/ 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 your blog %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);

    }
}

对于用户注册批准,我正在使用这个插件。

如何在用户使用我的自定义表单注册时发送电子邮件并在管理员批准时通知用户。

4

1 回答 1

0

您可以在 WP Approve User 插件的设置页面上设置新注册时向用户发送电子邮件的内容。此插件的设置位于 WordPress 仪表板的设置菜单下。在用户注册获得批准后,在那里添加内容将完成向用户发送电子邮件的工作。

如果您想在注册被批准后向管理员发送电子邮件,那么您可以在钩子上写一个代码wpau_approve。这个 Hook 接受用户 id 作为参数。

所以你可以这样写:

add_action ('wpau_approve' , 'send_mail_to_admin_post_approval', 10, 1);

/*
 * Sends email to Administrator after user registration is approved
 * 
 * @param int $user_id User id of user whose registration is just approved
 */
function send_mail_to_admin_post_approval($user_id) {

         $user = new WP_User($user_id);

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

        $message  = sprintf(__('New user registration on your blog %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);
}

如果即使在您的插件或主题的 functions.php 文件中添加上述代码后,邮件仍然无法发送,那么我们建议您安装插件Email Log。安装该插件后,您可以在 WordPress dashobard 的“工具”菜单下名为“电子邮件日志”的页面上查看由 wp_mail 功能触发的所有电子邮件的列表。如果您看到,您的电子邮件由 wp_mail 触发并且没有被收件人接收,那么这可能是您的 SMTP 设置的问题。

您可能必须在服务器上启用或安装 SMTP 软件。如果您无权访问它,请安装WP Mail SMTP插件并进行配置。如果 WP Mail SMTP 插件配置正确,收件人在配置插件后应该能够接收由 wp_mail 函数触发的电子邮件。

希望这可以帮助 :)

于 2015-01-30T07:45:24.427 回答