我有一个 WordPress 网站,想将其置于测试版或限制访问?

I have a WordPress site and would like to put it in beta or have restricted access?

我有一个 WordPress 网站。我想把它放在测试版中,还是只在短时间内限制对有限数量的人的访问?我在想我可以创建一个系统,他们可以在其中提交电子邮件,我向他们发送代码,他们就可以访问该站点,但是如何访问该站点?我该怎么做?

有多种选择,具体取决于您已有的(您是否在托管)

  1. 使用 vpn,让他们选择使用 vpn 登录并给他们本地 ip 或让他们从您的 dns 服务器获取 dns,以便他们可以使用名称(仅当使用 vpn
  2. 连接时
  3. 使用用户名 + 密码组合来授予使用 .htaccess 文件的访问权限
  4. 仅授予 .htaccess 文件中定义的 ip 的访问权限

最好的选择是为此编写自定义 php script/plugin,但如果您不愿意这样做,您可以依赖现有的插件。

您可以使用支持电子邮件的 wordpress 着陆 page/Comingsoon 页面插件。

此插件将对任何人隐藏您的 Wordpress 站点,除非他们已登录。

所以您可以做的是将登录页面上输入的电子邮件添加到邮寄列表中,然后向他们发送非常有限的 Wordpress 用户的帐户详细信息。

这将允许他们在登录后查看和访问您的网站,如果您不想让他们访问,只需删除 Wordpress 中的用户或更改密码。

一个这样的示例插件: https://wordpress.org/plugins/ultimate-landing-page-and-coming-soon-page

编辑:

最简单的方法是在模板文件夹中编写自定义脚本。 在您的模板文件夹中创建一个新文件 "comingsoon.php",我们将使用此文件在电子邮件提交时创建一个新用户。

在您的 header.php 顶部的任何其他代码之前输入以下代码。

<?php
if ( !is_user_logged_in() ) {
    get_template_part( 'comingsoon' );
    die();
} else{
    //Check if the user has been registerd longer than 30 days if so redirect him to the comingsoonpage again
    get_currentuserinfo(); 
    $user_data = get_userdata($user_ID);
    $registered_date = $user_data->user_registered;
    if (strtotime($registered_date) <= strtotime('-30 days') && !current_user_can('administrator')){
       get_template_part( 'comingsoon' );
    }
}
?>

上面的代码检查访问者是否登录,如果没有,它将把访问者重定向到 comingsoon 模板。

如果访问者已登录,它会检查用户是否是在 30 天前创建的,如果是,它还会将用户重定向到 comingsoon 模板(除非用户以管理员身份登录)

好的,现在是创建您的 "comingsoon.php" 的时候了,下面代码段中的 html 只是一个示例,您可以随意设置页面样式。

<?php
    global $wpdb;

    $table_name = $wpdb->prefix."comingsoon_users";

    //Check if our custom DBTable exists if not create it.
    if ($wpdb->get_var('SHOW TABLES LIKE '.$table_name) != $table_name) {

      $charset_collate = $wpdb->get_charset_collate();

        $sql = "CREATE TABLE $table_name (
          user mediumint(9) NOT NULL AUTO_INCREMENT,
          email tinytext NOT NULL,
          UNIQUE KEY user (user)
        ) $charset_collate;";

        require_once(ABSPATH.'wp-admin/includes/upgrade.php');
        dbDelta($sql);
    }

    //IF Email is submitted we will add the user to our custom DB table and retrieve the usersnumber.
    //We will use the usernumber to create an actual Wordpress user.
    if ($_POST['email']){

        $user_email = $_POST['email'];

        $userresult = $wpdb->get_results( "SELECT user FROM $table_name ORDER BY user DESC LIMIT 1");

    foreach ($userresult as $result) {            
        $usernum = $result->user;
    }

        $wpdb->insert( 
          $table_name, 
          array( 
            'user' => '',
            'email' => $user_email
          ), 
          array( 
            '%d',
            '%s'
          ) 
        );

        $usernum++;
        $user_name = 'User'.$usernum;

        //Create Wordpress user with name like: User10 and a random password.
        $user_id = username_exists( $user_name );
        if ( !$user_id and email_exists($user_email) == false ) {
            $random_password = wp_generate_password( $length=12, $include_standard_special_chars=false );
            $user_id = wp_create_user( $user_name, $random_password, $user_email );
        } else {
            $random_password = __('User already exists.  Password inherited.');
        }
    }

?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>

<head>

    <meta charset="<?php bloginfo( 'charset' ); ?>" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="<?php bloginfo('description'); ?>">
    <meta name="author" content="WebVerder">

    <title><?php bloginfo('name'); ?></title>

    <!-- Bootstrap Core CSS -->
    <link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/inc/css/bootstrap.min.css" type="text/css">

    <!-- Custom CSS -->
    <link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/inc/css/proverder.css" type="text/css">

</head>

<body id="page-top">

    <header>
        <div class="header-content">
            <div class="header-content-inner">
                <h1>Theme in development!</h1>
                <h2 class="header">Enter your email below to get a preview account.</h2>
                <hr>
                <form method="POST">
                    <div class="form-group" style="max-width: 500px; margin: 0 auto 0;">
                        <input type="email" class="form-control" name="email" placeholder="Pleace enter your Email!"><input type="submit">
                    </div>
                </form>                
            </div>
        </div>
    </header>

</body>

</html>

还没有完全测试代码,所以如果它没有像预期的那样工作,请告诉我!

请记住,用户必须通过转到 /wp_login url 登录,您可以在 comingsoon 页面的登录页面中添加 link。

但是显示 wordpress 后端登录表单并不好,因此您可以使用插件来设置登录页面的样式或包含一个插件,使通过 Ajax.

登录成为可能

使用 Ajax 您可以让用户从您即将推出的页面中登录,然后在登录到实际网站后将他们重定向。

希望这对您有所帮助:)