需要手动添加具有相同电子邮件地址的多个WP用户(有充分理由)

时间:2016-01-25 作者:A K

首先,我知道当有人想办法跳过创建新用户帐户的重复电子邮件检查时,许多人通常会提出一些担忧。

然而,在我的情况下,如果我能解释的话,我相信需要这样做的理由是合理的。

我正在我的网站上使用带有公共成员目录(最终成员)的成员插件构建一个广泛的供应商目录。问题是,并非所有供应商都要自己注册帐户。我想在我们的目录中包括一些供应商,纯粹是为了他们的公共联系信息,以便其他用户从目录中搜索。

对于这些我们可以归类为(非托管供应商)的供应商,我想使用一些“一网打尽”的电子邮件,例如[email protected]注册多个帐户。这些帐户将永远不会登录,因此密码恢复问题不会成为问题。我也不能每次都创建一个新的电子邮件地址来添加这些非托管供应商,也不能每次都因为电子邮件跳转而使用假电子邮件地址。

直到上周,我一直在使用这个名为“多个帐户”的插件,只允许一个特定指定的电子邮件地址进行多次注册。

然而,我已经将我的站点移动到了Multisite,这个插件似乎已经停止工作了。

在web搜索中,我看到了一些人们建议绕过电子邮件检查的功能片段,但由于许多人不赞成的原因,我不能简单地允许任何和所有电子邮件绕过此功能。我只想为1个电子邮件地址创建旁路(例如[email protected])。

对于多站点安装的代码片段,这是否可行?

根据编码逻辑,我认为如果注册电子邮件[email protected],然后允许注册,无需电子邮件重复检查。所有其他标准注册。

我希望任何人都能对此有所了解。提前感谢!

3 个回复
SO网友:fischi

这里是我们可以回答这个问题的另一种方法,这里有一个小插件,它为“用户”添加了一个子菜单页,其中包含一个小表单,您可以在其中输入用户名来创建没有电子邮件地址的新用户。

额外的错误处理允许您查看当前用户是否已经存在,因为用户名必须是唯一的。

创建add-anonymous-user.php 在插件目录中归档,并将此代码放在其中-激活插件,瞧。

玩得高兴

<?php

    /*
    Plugin Name: Add anonymous user
    Description: Add a user with no email adress
    Version:     0.0.1
    Plugin URI:  http://fischi.cc
    Author:      Thomas fischi! Fischer
    Author URI:  https://fischi.cc
    Domain Path: /languages/
    License:     GPL v2 or later

    */


    /* Add a Menu Page */
    add_action( \'admin_menu\', \'f711_register_menu_page\' );

    function f711_register_menu_page() {

        add_submenu_page( \'users.php\', \'Add anonymous User\', \'Anon User\', \'manage_options\', \'anon_user\', \'f711_menu_page\' );

    }

    // Function to display the input
    function f711_menu_page() {

        echo \'<div class="wrapper">\';
            //check if form was sent
            f711_check_for_input();
            echo \'<h1>\' . __( \'Add Anon User\', \'aau\' ) . \'</h1>\';
            echo \'<h3>\' . __( \'Username\', \'aau\' ) . \'</h3>\';
            // insert a small form that targets this page
            echo \'<form method="POST" action="">\';

                echo \'<input type="text" placeholder="\' . __( \'Insert User Name\', \'aau\' ) . \'" name="anonname" />\';
                echo \'<input type="submit" value="\' . __( \'Create\', \'aau\' ) . \'" />\';

            echo \'</form>\';

        echo \'</div>\';

    }

    // Function to process the input
    function f711_check_for_input() {

        // do nothing if Form was not sent
        if ( !isset( $_POST[\'anonname\'] ) || $_POST[\'anonname\'] == "" ) return;

        // sanitize the input to avoid security breaches
        $username = sanitize_text_field( $_POST[\'anonname\'] );

        // define the new user
        $args = array(
            \'user_login\' => $username,
            \'user_pass\'  => md5( rand( 1000000, 9999999 ) ), //create hash of randomized number as password
            \'role\'       => \'subscriber\'
        );

        // try to insert the user
        $user_id = wp_insert_user( $args );

        // check if everything went coorectly
        if ( !is_wp_error( $user_id ) ) {
            //add a small notice
            echo \'<div class="updated"><p>\' . __( \'User created\', \'aau\' ) . \': \'  . $username . \'</p></div>\';
        } else {
            //show error message
            $errors = implode( \', \', $user_id->get_error_messages() );
            echo \'<div class="error"><p>\' . __( \'Error\', \'aau\' ) . \': \' . $errors . \'</p></div>\';
        }

    }

SO网友:fischi

这很难做到,因为WordPress总是检查电子邮件地址是否已经被使用。

function email_exists( $email ) {
    if ( $user = get_user_by( \'email\', $email) ) {
        return $user->ID;
    }
    return false;
}
这个函数也是不可过滤的,所以在这个方向上没有办法。

然而,您可以做的是,只需插入没有电子邮件地址的用户就可以了,因为这不是必填字段。

$userdata = array(
    \'user_login\'  =>  \'login_name\' . rand( 0, 1000 ), // randomize the login to test for multiple users. This is the field where you can insert your usernames.
    \'user_pass\'   =>  NULL,  // When creating an user, `user_pass` is expected.
    \'role\'        => \'subscriber\' // do not forget to restrict capabilities for those users.
);

$user_id = wp_insert_user( $userdata );
如果您真的需要将EmailAddress存储在这些用户中(我看不出这有什么意义),可以手动将其添加到数据库中<我强烈建议不要这样做

您无法知道将来的更新会如何影响这一点。

无论如何,如果你喜欢玩火:

global $wpdb;

$query = "UPDATE $wpdb->users SET user_email = %s WHERE ID = %d";
$wpdb->get_results( $wpdb->prepare( $query, \'[email protected]\', $user_id ) );
正如我所提到的,我真的不明白这有什么意义,因为emailaddress不用于任何用途。不过,要玩得开心;)

你不能在WordPress的UI上使用它,你必须创建一个插件或其他东西来处理这个问题。

SO网友:RichyVN

有一个功能,让你输入用户没有任何电子邮件地址!如果这就是你想要的?只需将这段代码放入函数中。php

    // Remove required email address in user profile
    function remove_empty_email_error( $arg ) {
        if ( !empty( $arg->errors[\'empty_email\'] ) ) 
unset( $arg->errors[\'empty_email\'] ); }
    add_action( \'user_profile_update_errors\', \'remove_empty_email_error\' );
这将抑制用户配置文件中的错误消息,并允许您输入该用户,而无需任何电子邮件地址。