wordpress用户注册和登陆时 给加一个特殊的验证口令

wordpress 2025-07-26 89

下面给出3种常见做法,从「最简单」到「较安全」依次排列。你可以根据站点规模、是否愿意装插件、以及是否愿意改代码来取舍。

方案一:用现成插件(最简单,30 秒搞定)

后台 → 插件 → 安装插件

搜索并安装 「Access Category Password」 或 「Password Protected」(两款都支持给整站或注册/登录页单独加口令)。

启用后进入设置页,把「注册 / 登录页」勾选,并填好你想要的「特殊验证口令」。

保存即可。

以后任何人访问 /wp-login.php?action=register 或 /wp-login.php 时,都会先弹一个口令框,输入正确后才能看到 WordPress 原生注册/登录表单。

优点:不改代码、不担心升级被覆盖。

缺点:多了个插件,且口令是全局的,无法给不同用户发不同口令。

方案二:在主题的 functions.php 里加 10 行代码(无插件,轻量)

把下面代码扔进「子主题」或「Code Snippets」插件里即可。

作用: 在登录和注册表单各加一个文本框;如果用户没填或填错,就拒绝提交。

/**
 * 给登录/注册表单额外增加一个口令字段
 */
add_action( 'login_form', function () {
    echo '<p>
            <label for="my_secret">' . __( '站点口令', 'txtdomain' ) . '<br/>
            <input type="text" name="my_secret" id="my_secret" class="input" value="" size="20" /></label>
          </p>';
});

/**
 * 登录时校验
 */
add_filter( 'authenticate', function ( $user, $username, $password ) {
    if ( empty( $_POST['my_secret'] ) || $_POST['my_secret'] !== 'wodepress' ) {
        return new WP_Error( 'wrong_secret', '<strong>错误</strong>:站点口令不正确。' );
    }
    return $user;   // 继续让 WordPress 做用户名密码校验
}, 30, 3 );

/**
 * 注册时校验
 */
add_action( 'register_post', function ( $username, $email, $errors ) {
    if ( empty( $_POST['my_secret'] ) || $_POST['my_secret'] !== 'wodepress' ) {
        $errors->add( 'wrong_secret', '<strong>错误</strong>:站点口令不正确。' );
    }
}, 10, 3 );

把 ‘wodepress’ 换成你自己的口令即可。

优点:无插件,代码量小。

缺点:每次换口令要改代码;若主题升级被覆盖,需重新放一次(所以最好用子主题)。

方案三:使用「邀请码」插件(可给不同人不同码,较安全)

安装 「WP Invites Code」 或 「BuddyPress Invite Code」。

在插件后台生成一批一次性/可限制使用次数的邀请码。

注册页面会自动出现一个「邀请码」输入框,后台可实时查看使用记录。

适合内测、小范围邀请、防止撞库爆破。

常见问题

只想挡机器人,不想挡真人?

装 「WPS Hide Login」 把登录地址改掉,再配合 「Limit Login Attempts Reloaded」 防爆破,比口令更轻量。

想彻底关闭公开注册,只让管理员后台手动建账号?

设置 → 常规 → 取消「任何人都可以注册」,然后在「用户 → 添加用户」里手动建号即可,口令功能就省了。

一句话总结:

图省事 → 用插件(方案一或三)。

想极简 → 贴上面 10 行代码(方案二)。

推荐模板