Limiting the number of users

时间:2013-08-14 作者:Craig Jones

我想知道是否有办法限制可以注册到Wordpress网站的用户数量?

例如,我想创建一个小网站,为客户保存信息,在那里他们最多只能有(例如)50个用户。其想法是,您需要登录才能查看该网站,并且只允许创建一定数量的用户。也许有人知道一个插件可以做到这一点?

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

正如您在WordPress Option Reference, 有一个选项叫做users_can_register. 您可以根据默认设置在(网络)站点设置中进行设置。

  • 1 => 是0 => 不,像往常一样:有一个过滤器可以从插件截取。

    "option_{$option_name}"
    
    因此,您只需将回调附加到此筛选器,并检查具有WP_User_Query 对于get_current_blog_id().

    <?php
    
    namespace WPSE;
    /** Plugin Name: WPSE (#110036) Limit Total Users per page */
    defined( \'ABSPATH\' ) or exit;
    
    \\add_filter( \'option_users_can_register\', \'limit_total_users\' );
    function limit_total_users( $option )
    {
        // Nothing to do here
        if ( 0 === $option )
            return $option;
    
        static $users = null;
        $limit = 50;
    
        if ( null === $users )
        {
            $users_query = new \\WP_User_Query( array(
                \'blog_id\' => get_current_blog_id()
            ) );
            $users = $users_query->get_total();
        }
    
        // Abort if we\'re above the limit
        if ( $limit > $users )
            return 0;
    
        return $option;
    }
    
    这个小插件的好处是,如果注册已经关闭,它不会进行额外的查询。

SO网友:GhostToast

借鉴凯撒的答案:

add_filter( \'option_users_can_register\', \'limit_total_users\' );
function limit_total_users( $option )
{
    // Registration turned off manually. Nothing to do here.
    if ( 0 === $option )
        return $option;

    $user_count = count_users();

    // Abort if we\'re above the limit
    if ( $user_count[\'total_users\'] > 50 ) {
        return 0;
    } 

    // The threshold wasn\'t reached yet.
    return $option;
}
这方面的有趣信息count_users() 函数是它实际返回一个数组,其中包含每个角色的计数。您可能希望确定您限制的角色,或者简单地加/减以说明差异,例如,管理员的数量-因为您可能不希望将自己计算在总数中。

SO网友:s_ha_dum

此解决方案与其他解决方案的不同之处在于,中的主要工作是完成用户注册。用户注册后,计算总用户数,然后users_can_register 如有必要,将更新选项。这似乎是减少前端处理时间的最佳方法。连接到的相关函数pre_option_users_can_register 通过在“常规设置”中切换开关并获得额外用户,防止博客管理员作弊。从技术上讲,只有该功能是必要的,但我已经解释了其他功能的原因。

function count_reg_users_wpse_110036() {
  global $wpdb;
  $users = $wpdb->get_var("SELECT COUNT(ID) FROM {$wpdb->users}");
  return $users;
}

function limit_users_wpse_110036() {
  $count = apply_filters(\'limit_user_count\',4);
  $users = count_reg_users_wpse_110036();
  if ($users >= $count) {
    update_option(\'users_can_register\',0);
  }
}
add_action(\'user_register\',\'limit_users_wpse_110036\');

function limit_user_option_wpse_110036($option) {
  remove_filter(\'pre_option_users_can_register\',\'limit_user_option_wpse_110036\');
  $reg = get_option(\'users_can_register\');
  if (0 === $reg) {
    return 0;
  }
  $count = apply_filters(\'limit_user_count\',4);
  $users = count_reg_users_wpse_110036();
  if ($users >= $count) {
    update_option(\'users_can_register\',0);
    return 0;
  } else {
    return $option;
  }
}
add_filter(\'pre_option_users_can_register\',\'limit_user_option_wpse_110036\');

结束

相关推荐

Rating system for users

我想在我的wordpress网站上实现一个系统。在我的网站上,有一群用户注册了。这是一个社交网站。我基本上希望有一个分级系统,根据用户的技能对其进行排名。我使用buddy press为用户创建他们自己的配置文件。我几乎想在他们的个人资料中添加一个标准,一个下拉菜单,上面写着给你的游戏技能打分1-10。但问题是,每个人都会把自己排得很高。我几乎想要一个用户可以自己去排名的系统,但如果需要的话,我可以进来修改排名。有什么建议吗?