如何在BuddyPress中隐藏管理员帐号?(出于安全原因)

时间:2012-08-15 作者:Paul T.

我在WordPress工作了3-4年,但我对BuddyPress还是个新手。

出于安全原因,我想对BuddyPress完全隐藏管理员帐户。例如,对于一个普通的WordPress博客,我会有两个独立的帐户(一个拥有隐藏的管理权限,另一个只有一个编辑角色来发布所有文章)。这样,管理员帐户将对公众隐藏,任何试图闯入的人都必须猜测密码和用户名。在BuddyPress中,这并不容易,因为管理员帐户非常公开。

我设法做到的一件事是,通过编辑/bp主题/bp默认值/members/member\\u循环,将管理概要文件从members目录中排除。php文件。(是的,我知道我不应该编辑默认主题,而应该创建子主题或独立主题!我将在解决此问题后立即着手。)我添加了;exclude=1个参数(1是管理员帐户的用户ID),如下所示:

<?php if ( bp_has_members( bp_ajax_querystring( \'members\' ).\'&exclude=1\' ) ) : ?>
但我需要以下方面的帮助:

  1. Hiding the admin profile (即,使其仅对自身可见,而不对其他任何人可见)

  2. Preventing the admin\'s activity from appearing publicly on the site.

PS.我正在考虑在多站点网络中安装BuddyPress,因此不要以这种方式公开超级管理员帐户对我来说非常重要。

编辑:下面是我为#1想到的内容(它进入主题的functions.php 页码):

// Hide admin profile pages
add_action( \'wp\', \'hide_profile_template\', 1 );
function hide_profile_template() {
global $bp; 
    if(bp_is_profile && $bp->displayed_user->id == 1 && $bp->loggedin_user->id != 1) :
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
        include(locate_template(\'404.php\'));
        exit;
    endif;
}
所以现在我仍然需要帮助hiding admin activity (#2)。

6 个回复
SO网友:Diana

我发现了这个:

Exclude Users from Members directory on a BuddyPress based social network

我们需要\'bp_ajax_querystring\' 滤器

以下代码将允许从members目录中排除用户。他们仍将列在与他们是朋友的其他用户的朋友列表中。

add_action(\'bp_ajax_querystring\',\'bpdev_exclude_users\',20,2);
function bpdev_exclude_users($qs=false,$object=false){
 //list of users to exclude

 $excluded_user=\'1,2,3\';//comma separated ids of users whom you want to exclude

 if($object!=\'members\')//hide for members only
 return $qs;

 $args=wp_parse_args($qs);

 //check if we are listing friends?, do not exclude in this case
 if(!empty($args[\'user_id\']))
 return $qs;

 if(!empty($args[\'exclude\']))
 $args[\'exclude\']=$args[\'exclude\'].\',\'.$excluded_user;
 else
 $args[\'exclude\']=$excluded_user;

 $qs=build_query($args);

 return $qs;

}

Source

在BP foruns中:

how to hide admin activity on Buddypress activity?

将此代码放入bp自定义。php和任何站点管理活动都不会被记录,您也不会出现在“谁在线/最近活跃的成员”小部件中。

add_action("plugins_loaded","bpdev_init_sm_mode");
function bpdev_init_sm_mode(){
if(is_site_admin())
remove_action("wp_head","bp_core_record_activity"); //id SM is on, remove the record activity hook
}

Source

我认为您可以合并这两个过滤器并一次性隐藏管理员:)

UPDATE

因为这些黑客在1.6中不起作用this topic 建议使用BuddyPress中的旧管理栏进行操作。是这样吗?

SO网友:ubernaut

了解如何执行此操作。这是buddypress忍者和恢复管理栏的组合。忍者插件可以工作,但目前无法在新的管理栏中切换。因此,您可以临时激活旧条,切换隐藏模式,然后重新激活新条。

更多信息请点击此处:

SO网友:Ünsal Korkmaz
// http://wordpress.org/extend/plugins/bp-ninja/
add_action(\'bp_init\', function() {
    global $bp;

    if (is_super_admin()) {
            //first remove the action that record the last activity
            remove_action(\'wp_head\', \'bp_core_record_activity\');

            //then remove the last activity, if present
            delete_usermeta($bp->loggedin_user->id, \'last_activity\');
    }
});

// "Not recently active" yazısını super admin için kaldır
add_filter( \'bp_core_get_last_activity\', function($last_active){
    global $bp;
    if ( bp_is_active( \'xprofile\' ) ){
        $last_active_bp_string = __( \'Not recently active\', \'buddypress\' );
        if( ($last_active_bp_string == $last_active) && is_super_admin($bp->displayed_user->id)) {
            $last_active = __(\'Network Admin\');
        }
    }
    return $last_active;
});
SO网友:DrMosko

刚刚从buddypress 1.9.2中删除了管理员用户

我是这样做的:

我的管理员用户id2

在文件中:buddypress\\bp-members\\bp-members-template.php

查找第292行\'exclude\' => false,

和更改false 至您的用户id我的案例2 :

 // type: active ( default ) | random | newest | popular | online | alphabetical
$defaults = array(
    \'type\'            => $type,
    \'page\'            => $page,
    \'per_page\'        => 20,
    \'max\'             => false,

    \'page_arg\'        => \'upage\',       // See https://buddypress.trac.wordpress.org/ticket/3679

    \'include\'         => false,         // Pass a user_id or a list (comma-separated or array) of user_ids to only show these users
    \'exclude\'         => 2,         // Pass a user_id or a list (comma-separated or array) of user_ids to exclude these users

    \'user_id\'         => $user_id,      // Pass a user_id to only show friends of this user
    \'search_terms\'    => $search_terms, // Pass search_terms to filter users by their profile data

    \'meta_key\'        => false,         // Only return users with this usermeta
    \'meta_value\'      => false,         // Only return users where the usermeta value matches. Requires meta_key

    \'populate_extras\' => true           // Fetch usermeta? Friend count, last active etc.
);

SO网友:this should work
<?php
add_action(\'bp_ajax_querystring\',\'bpdev_exclude_users\',20,2);
function bpdev_exclude_users($qs=false,$object=false){
    //list of users to exclude

    $excluded_user=join(\',\',bpdev_get_administrator_user_ids());//comma separated ids of users whom you want to exclude

    if($object!=\'members\')//hide for members only
        return $qs;

    $args=wp_parse_args($qs);

    //check if we are searching for friends list etc?, do not exclude in this case
    if(!empty($args[\'user_id\']))
        return $qs;

    if(!empty($args[\'exclude\']))
        $args[\'exclude\']=$args[\'exclude\'].\',\'.$excluded_user;
    else 
        $args[\'exclude\']=$excluded_user;

    $qs=build_query($args);


   return $qs;

}

function bpdev_get_administrator_user_ids(){
    $users=array();
    $administrators= get_users( array( \'role\' => \'administrator\' ) );
   if(!empty($administrators)){
       foreach((array)$subscribers as $administrators)
           $users[]=$administrators->ID;

   }
   return $users;
}
?>
SO网友:user1973842

我在buddydev上找到了这个简洁的小代码。最初用于隐藏当前用户。但它很容易更改为隐藏管理员;

add_action( \'pre_user_query\', \'devb_exclude_loggedin_user\', 201 );

function devb_exclude_loggedin_user( $query ) {

    //do not hide users inside the admin
    if ( is_admin() && !defined(\'DOING_AJAX\') )
        return;
    $qv = $query->query_vars;

    global $wpdb;
    //hide in my case user_id: 1
    $query->query_where .= $wpdb->prepare(" AND {$wpdb->users}.ID !=%d ", 1);
}

source

结束

相关推荐

如何将wp-login.php重命名为MultiSite?

我想隐藏并重命名wp-login.php 在我的URL中,用于在多站点设置上创建品牌。从这个forum post 我知道我可以改变mysite.com/wp-login.php 到mysite.com/login 通过插入RewriteRule ^login$ wp-login.php 在我的.htaccess. 我喜欢URL栏不显示登录重定向到wp登录。如果我尝试在子网站下登录mysite.com/subsite1/login 它显示为重定向自mysite.com/subsite1/wp-login