对于这个特定的BuddyPress挂钩,是否可以通过template.php而不是unction.php添加_action?

时间:2016-03-21 作者:Bhupen

对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!! - 这完全是错误的。

    所以为了解决这个问题。我有这些选择和逻辑。

    将当前登录的用户与显示的用户配置文件进行比较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

    如果有任何其他方法或任何其他类似的建议,提出的想法也会很好。

    谢谢

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

    正如cybmeta所说,移除该选项卡不会阻止对功能的访问。

    快速解决方案是保留所有选项卡,而不考虑用户的角色。

    相反,将条件添加到an overloaded template.

    例如,重载此模板:

    buddypress\\bp-templates\\bp-legacy\\buddypress\\members\\single\\profile\\edit.php
    
    并在顶部添加基于角色的条件。条件将控制用户是否看到编辑表单或有关权限的消息或重定向或。

    相关推荐

    BuddyPress返回错误的xprofile日期

    一切正常,但突然间BuddyPress xprofiledate 字段之前给出一个日期。然而,我已经检查了数据库,输入是正确的。它只是返回了错误的日期。这意味着,如果我将日期设置为1920-12-12,它将存储正确的(相同),但返回1920-12-11。我使用以下BuddyPress函数获取日期。// tried by field id bp_get_profile_field_data([ \'field\' => 5, \'user_id\' =>