对wordpress编码来说相当陌生。我希望有人能在这个问题上指导我。目前,我正在创建一个主题,该主题使用buddypress插件和我自己自定义的用户角色。自定义用户角色的所有内容都已就绪,如下所示:
对于我添加的自定义角色和is working 正如我所期望的那样:
管理员//管理员
业务\\u所有者//可以编辑除管理员以外的所有用户的自定义角色业务\\u经理//可以编辑除管理员和所有者以外的所有用户的自定义角色顶级\\u员工//可以编辑除管理员、所有者、经理以外的所有用户的自定义角色初级\\u员工//可以编辑除管理员、所有者、经理和顶级员工以外的所有用户的自定义角色这些所有用户都可以访问wordpress后端,并可以根据其能力编辑用户。
我想buddypress没有意识到这一点。因此,在wordpress后端,这些用户只能创建、修改和删除他们可以创建、修改和删除的用户。
But as soon as they go to buddypress profile via frontend, a normal staff are able to edit administrator just by clicking the buddypress settings and profile tab!! - 这完全是错误的。
所以为了解决这个问题。我有这些选择和逻辑。
将当前登录的用户与显示的用户配置文件进行比较比较后,删除buddypress特定的菜单选项卡,如“设置”等这是我在主题中所做的,我有function.php 和buddypress.php (这是为了显示buddypress页面与page.php 格式。
codes in buddypress.php
这里的代码没有经过优化,但解释得很清楚,所以每个人都可以很容易地理解到底发生了什么
//codes in buddypress.php
// the function " bp_displayed_user_id(); " - only displays user id when used in buddypress.php but not in function.php!!!
$displayed_user_id = bp_displayed_user_id();
$displayed_user = new WP_User( $displayed_user_id );
if ( !empty( $displayed_user->roles ) && is_array( $displayed_user->roles ) ) {
foreach ( $displayed_user->roles as $displayed_user_role )
if($displayed_user_role == \'administrator\') {
$displayed_user_role = 9;
}elseif ($displayed_user_role == \'business_owner\') {
$displayed_user_role = 8;
}elseif ($displayed_user_role == \'site_manager\') {
$displayed_user_role = 7;
}elseif ($displayed_user_role == \'top_level_staffs\') {
$displayed_user_role = 6;
}elseif ($displayed_user_role == \'junior_staffs\') {
$displayed_user_role = 5;
}elseif ($displayed_user_role == \'editor\') {
$displayed_user_role = 4;
}elseif ($displayed_user_role == \'author\') {
$displayed_user_role = 3;
}elseif ($displayed_user_role == \'contributor\') {
$displayed_user_role = 2;
}else{
$displayed_user_role = 1; //for subscriber
}
}
$current_user_id = get_current_user_id();
$current_user = new WP_User( $current_user_id );
if ( !empty( $current_user->roles ) && is_array( $current_user->roles ) ) {
foreach ( $current_user->roles as $current_user_role )
if($current_user_role == \'administrator\') {
$current_user_role = 9;
}elseif ($current_user_role == \'business_owner\') {
$current_user_role = 8;
}elseif ($current_user_role == \'site_manager\') {
$current_user_role = 7;
}elseif ($current_user_role == \'top_level_staffs\') {
$current_user_role = 6;
}elseif ($current_user_role == \'junior_staffs\') {
$current_user_role = 5;
}elseif ($current_user_role == \'editor\') {
$current_user_role = 4;
}elseif ($current_user_role == \'author\') {
$current_user_role = 3;
}elseif ($current_user_role == \'contributor\') {
$current_user_role = 2;
}else{
$current_user_role = 1; //for subscriber
}
}
if($current_user_role < $displayed_user_role) {
function restrict_bp_settings() {
global $bp;
bp_core_remove_nav_item(\'settings\');
}
add_action( \'bp_setup_nav\', \'restrict_bp_settings\'); // this action - only works if used in function.php but not in buddypress.php why!!!
}
get_header();
if (have_posts()) :
while (have_posts()) : the_post();?>
<?php get_template_part(\'content\');
endwhile;
else :
get_template_part(\'nothing\');
endif;
get_footer();
那么,如何通过buddypress添加\\u操作呢。php来实现这一点。或者我怎样才能
bp_displayed_user_id(); 在函数中使用显示id。php
如果有任何其他方法或任何其他类似的建议,提出的想法也会很好。
谢谢
最合适的回答,由SO网友:shanebp 整理而成
正如cybmeta所说,移除该选项卡不会阻止对功能的访问。
快速解决方案是保留所有选项卡,而不考虑用户的角色。
相反,将条件添加到an overloaded template.
例如,重载此模板:
buddypress\\bp-templates\\bp-legacy\\buddypress\\members\\single\\profile\\edit.php
并在顶部添加基于角色的条件。条件将控制用户是否看到编辑表单或有关权限的消息或重定向或。