问题描述

我必须根据用户角色从’Profile’ 页面中删除一些配置文件字段。为了去除颜色选择器,我用了 remove_action("admin_color_scheme_picker", "admin_color_scheme_picker")。我想删除这些字段:

  1. 昵称

  2. 公开显示名称

  3. AIM,雅虎,谷歌和关于你自己的领域

  4. 「显示管理员」 部分以及 2 个复选框

我经历了’user-edit.php’ 文件,看看是否有任何允许我这样做的动作/过滤器,但似乎没有。有人可以告诉我怎么做吗?任何帮助将不胜感激。谢谢

编辑:谢谢 @helenhousandi 的答案。我已经这样做了。

<?php
add_action('admin_footer-profile.php', 'remove_profile_fields');
function remove_profile_fields()
{
    if(current_user_can('custom_role'))
    { ?>
        <script type="text/javascript">
            jQuery("h3:contains('Personal Options')").next('.form-table').remove();
            jQuery("h3:contains('Personal Options')").remove();
            jQuery("h3:contains('About Yourself')").next('.form-table').remove();
            jQuery("h3:contains('About Yourself')").remove();
        </script>
<?php }
}
?>

我知道这是一个更长的时间,但它的工作!我想我会去 @ helenhousandi 的答案。

最佳解决方案

对于接触方式过滤器:user_contactmethods

function update_contact_methods( $contactmethods ) {

    unset( $contactmethods['aim'] );
    unset( $contactmethods['jabber'] );
    unset( $contactmethods['yim'] );

    return $contactmethods;

}
add_filter( 'user_contactmethods', 'update_contact_methods' );

次佳解决方案

虽然 user_contactmethods 过滤器是用户配置文件屏幕中的少数几个,但由于 WordPress 中不需要其他字段,因此您可以使用 jQuery 的.hide().remove()来有效地摆脱不需要的复杂程序保存信息。当然,没有 JS 的人仍然会看到他们,但是这是一小部分人,我猜测在那里改变的信息实际上并不会影响任何事情。

删除整个个人选项的一个例子 (显示管理员栏和配色方案) 。我知道这不是你正在寻找的,只是想给你一个快速的例子我手头:

// remove personal options block
if( is_admin() ){
    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
    add_action( 'personal_options', 'prefix_hide_personal_options' );
}

function prefix_hide_personal_options() {
  ?>
    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
            $( '#your-profile .form-table:first, #your-profile h3:first' ).remove();
        } );
    </script>
  <?php
}

另外,关于 Show Admin Bar 选项的注释:在 3.3 中,管理栏正在成为标题,因此不能被打开或关闭,因此可能不值得担心。

我更新了代码示例,以更准确,更完整。在那里有一些剩菜。

第三种解决方案

wordpress support forum 可以使用 PHP 进行删除。这将删除 「About Yourself」 部分:

if (! function_exists('remove_plain_bio') ){
    function remove_plain_bio($buffer) {
        $titles = array('#<h3>About Yourself</h3>#','#<h3>About the user</h3>#');
        $buffer=preg_replace($titles,'<h3>Password</h3>',$buffer,1);
        $biotable='#<h3>Password</h3>.+?<table.+?/tr>#s';
        $buffer=preg_replace($biotable,'<h3>Password</h3> <table class="form-table">',$buffer,1);
        return $buffer;
    }

    function profile_admin_buffer_start() { ob_start("remove_plain_bio"); }

    function profile_admin_buffer_end() { ob_end_flush(); }
}
add_action('admin_head', 'profile_admin_buffer_start');
add_action('admin_footer', 'profile_admin_buffer_end');

代码将’About Yourself’ 标头替换为’Password’,然后剥离它找到的下一个表 (这是密码表) 之间的任何东西。

另外插件 WP Hide Dashboard 做类似的 jQuery 替换,如果你想扩展它。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。