如何为用户禁用profile.php?

时间:2015-07-23 作者:akarim

I am using wordpress 4.2.2 and i am using buddypress latest version. I want all my users customize their profile at buddypress profile page. So i want to disable profile.php for the users. I hide the profile link from dashboard by the WP admin UI customize plugin.But when anyone type url mysite/wp-admin/profile.php it\'s appear on browser.So i want to escape from the problem and want to disable profile.php for the users. What should i do to do this?

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

重定向自profile.php 到仪表板,有一种方法:

add_action( \'load-profile.php\', function() {
    if( ! current_user_can( \'manage_options\' ) )
        exit( wp_safe_redirect( admin_url() ) );
} );
如果当前用户无法管理选项,则重定向到仪表板。

重定向自profile.php 到当前用户的成员页面如果要重定向到成员的配置文件页面,可以尝试(未测试):

add_action( \'load-profile.php\', function() {
    if( ! current_user_can( \'manage_options\' ) && function_exists( \'bp_core_get_user_domain\' ) )
        exit( wp_safe_redirect( bp_core_get_user_domain( get_current_user_id() ) ) );
} );
Thebp_core_get_user_domain() 功能如中所述this answer, 几年前,作者是@BooneGorges。

我刚查过BPsource 此功能在BP 2.3中仍然可用(请参见here).

对于PHP<;5.3

add_action( \'load-profile.php\', \'wpse_195353_profile_redirect_to_dashboard\' );
function wpse_195353_profile_redirect_to_dashboard()
{
    if( ! current_user_can( \'manage_options\' ) )
        exit( wp_safe_redirect( admin_url() ) );
}
以及

add_action( \'load-profile.php\', \'wpse_195353_profile_redirect_to_member_page\' );
function wpse_195353_profile_redirect_to_member_page()
{
    if( ! current_user_can( \'manage_options\' ) && function_exists( \'bp_core_get_user_domain\' ) )
        exit( wp_safe_redirect( bp_core_get_user_domain( get_current_user_id() ) ) );
}
但如果是这样的话,您应该考虑更新PHP。

SO网友:Mayeenul Islam

以下代码*将非管理员重定向到前端的自定义配置文件页面,因为您需要将它们重定向到自定义页面,而不是禁用它们。:)

<?php
add_action (\'init\' , \'wpse_redirect_profile_access\');

function wpse_redirect_profile_access(){
        //admin won\'t be affected
        if (current_user_can(\'manage_options\')) return \'\';

        //if we\'re at admin profile.php page
        if (strpos ($_SERVER [\'REQUEST_URI\'] , \'wp-admin/profile.php\' )) {
            wp_redirect ( home_url( \'/my-profile\' )); // to page like: example.com/my-profile/
            exit();
        }

}
*Source^

SO网友:Bryan Willis

我喜欢这个。您可以将管理页面添加到阵列以重定向它们。我将其重定向到下面的仪表板,但您也可以重定向到BuddyPress URL。。。我只是不确定那个URL是什么,因为我不经常使用BP。

   function no_proflie_admin_pages_redirect() {
      global $pagenow;
      if(!current_user_can(\'manage_options\')) {
          $admin_redirects = array(
                    \'profile.php\'
                );
          if(in_array($pagenow, $admin_redirects)){
            wp_redirect( admin_url(\'/\') ); exit;
          }
      }
    }
    add_action(\'admin_init\', \'no_proflie_admin_pages_redirect\');
  

You can also hide any additional profile.php links with simple CSS:

function hide_any_profile_links() { ?>
    <style type="text/css">
        a[href="http://example.com/wp-admin/profile.php"], a[href="profile.php"]{
            display: none!important;
        }
    </style>
<?php }
add_action(\'admin_head\', \'hide_any_profile_links\', 999);
上述内容也可以通过jquery或使用PHP和输出缓冲区来实现。

结束

相关推荐

Client Profiles

正在寻找创建客户机数据库的最佳方法。插件能最好地实现以下功能吗?我的客户端数据库插件存储有关客户端的个人信息和统计信息,这些信息和统计信息将通过自定义字段和自定义表单收集,管理员创建客户端配置文件后,仪表板选项卡将打开列表区域(类似于用户选项卡)(仅限管理员)“添加新”功能(类似于仪表板的用户区域)。管理员可以将客户端分配给用户,分配给用户的客户端显示为用户元数据。分配给用户的客户端将在用户配置文件中可见,仪表板小部件显示为登录用户分配的客户端,并带有指向客户端配置文件页面的链接。插件是解决此问题的解决方