在没有完全关闭的情况下删除“公共”用户注册?

时间:2014-05-13 作者:Designer 17

我需要知道是否有办法删除register WordPress登录页面上的按钮以及registration form ... 不影响核心文件。。。这样我就不会让“任何人”(或垃圾邮件发送者)来设置帐户!

但是,我仍然需要user registration 功能正常工作。

我有一个“私人”照片上传器,锁定任何没有该网站帐户的人。。。但是,新用户注册的唯一方法(我希望的唯一方法是)是向自定义用户提供登录信息,以解锁注册表。因此,仅将用户限制为“邀请”。

NOTE: 我已经在使用一个插件了,所以我不能只使用另一个插件,因为这是一种不好的做法。这一定是我可以放在函数中的东西。php文件或类似文件。

<小时>

UPDATE:

根据@Stephen Harris给出的答案,我已经考虑使用wp_create_user 作用然而,我对如何将其添加到现有的“定制”注册表中感到有点困惑(这将与默认值完全分离register 表格)。

这是我当前的表单代码:

<!-- Registration form -->
<h1 class="register-header">Register a new user</h1>
<?php $register = $_GET[\'register\']; 
    if($register == true) { 
        echo \'<p class="register-success">Check your email for the password! Logout and use your new username & password.</p>\'; 
    }?>
<a class="logout" href="<?php echo wp_logout_url( get_permalink() ); ?>">Logout</a>

<form method="post" id="register_form" class="wp-user-form" action="echo site_url(\'wp-login.php?action=register\', \'login_post\') ?>">
    <!-- Username -->
    <p>
        <input type="text" name="user_login" id="user_login" class="input" placeholder="unique username" />
    </p>
    <!-- Email to send p/w to -->
    <p>
        <input type="email" name="user_email" id="user_email" class="input" placeholder="email address" />
    </p>

    <p class="small-text">You will receive an email with a generated password<br />(which you can change in your "user settings")</p>

    <?php do_action(\'register_form\'); ?>
    <button name="wp-submit" id="wp-submit" class="btn">Register new user</button>
    <input type="hidden" name="redirect_to" value="<?php echo $_SERVER[\'REQUEST_URI\']; ?>?register=true" />
    <input type="hidden" name="user-cookie" value="1" />

</form><!-- end registration-form -->
当打开“任何人都可以注册”时,这一切都会起作用。。。但是,当我把它“关掉”时,我该如何让它工作呢?

3 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

在“设置”>“常规”下有一个“成员资格”设置。通过禁用“任何人都可以注册”,将有效删除面向公众的注册页面以及“注册”按钮。

然而,API仍然可用(例如。wp_create_user().)

顺便提一下,你提到

注意:我已经在使用一个插件了,所以我不能只使用另一个插件,因为这是一种不好的做法

如果您的意思是,您正在创建一个用于分发的插件,并且不需要第三方依赖,那么这是可以理解的。但总的来说,使用多个插件来实现期望的结果并没有错。

SO网友:s_ha_dum

我怀疑@StephenHarris的回答可能是正确的,您可以关闭公共注册,让您的代码使用API,但有一种方法可以从页面中删除注册链接。

如果你看看source for the Core login 第页您将看到以下内容:

541 if ( get_option( \'users_can_register\' ) ) :
542         $registration_url = sprintf( \'<a href="%s">%s</a>\', esc_url( wp_registration_url() ), __( \'Register\' ) );
如果你能接到电话get_option() 返回false 链接将消失。get_option() 提供了一个允许这样做的挂钩。

45            $pre = apply_filters( \'pre_option_\' . $option, false );
46            if ( false !== $pre )
47                    return $pre;

https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/option.php#L45

嗯,算是吧。正在返回false 从那个钩子上钩起来不太管用,但是回来null

以及login_init 操作将允许您将效果限制为一页。所以

add_action(
  \'login_init\',
  function() {
    add_filter(\'pre_option_users_can_register\',\'__return_null\');
  }
);
参考号:http://codex.wordpress.org/Function_Reference/_return_null

SO网友:Designer 17

在做了大量的研究和大量的阅读(和重读)之后,我终于能够弄清楚如何wp_create_user 去工作吧!

下面您将看到我用来实现此目的的代码:

<!-- Registration form -->
<h1 class="register-header">Register a new user</h1>
<?php $register = $_GET[\'register\']; 
if($register == true) { 
    echo \'<p class="register-success">Check your email for the password! Logout and use your new username & password.</p>\'; 
}?>
<a class="logout" href="<?php echo wp_logout_url( get_permalink() ); ?>">Logout</a>

<form method="post" id="register_form" class="wp-user-form" action="<?php echo $_SERVER[\'REQUEST_URI\'] ?>">
    <!-- Username -->
    <p>
        <input type="text" name="user_login" id="user_login" class="input" placeholder="unique username" />
    </p>
    <!-- Email to send p/w to -->
    <p>
        <input type="email" name="user_email" id="user_email" class="input" placeholder="email address" />
    </p>

    <p class="small-text">You will receive an email with a generated password<br />(which you can change in your "user settings")</p>
    <button name="wp-submit" id="wp-submit" class="btn">Register new user</button>
</form>

<?php 
$username = $_POST[\'user_login\'];
$email = $_POST[\'user_email\'];

if (( $username != \'\' ) && ( $email != \'\' )){

    $user_id = username_exists( $username );
    $user_email = email_exists( $email );

    if (( !$user_id ) && ( !$user_email )) {

        // Generate the password and create the user
        $password = wp_generate_password( 12, false );
        $user_id = wp_create_user( $username, $password, $email );

        // Update user
        wp_update_user( array( \'ID\' => $user_id ));

        // Set user role
        $user = new WP_User( $user_id );
        $user->set_role( \'subscriber\' );

        // Email user their password
        wp_mail( $email, \'Your new password!\', \'Here\\\'s your new password: \' . $password );
    } else {

        $password = __( \'User already exists.\' );
    } 
}?>
<!-- end registration-form -->
这处理创建一个新用户太棒了!但我必须处理错误。

如果有人对我的做法有任何建议或更正,请让我知道。。。我仍在思考这些东西是如何工作的

结束