如何从“个人资料”部分删除这些字段?

时间:2011-11-03 作者:Rutwick Gangurde

我必须根据用户角色从“配置文件”页面中删除一些配置文件字段。用于删除我使用的颜色选择器remove_action("admin_color_scheme_picker", "admin_color_scheme_picker"). 我要删除这些字段:

昵称公开显示名称为AIM、Yahoo、Google talk和About yourself字段“显示管理栏”部分以及2个复选框,我查看了文件“用户编辑”。php“来看看是否有任何操作/过滤器允许我这样做,但似乎没有。有人能告诉我怎么做吗?任何帮助都将不胜感激。谢谢

EDIT:谢谢@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的回答。

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

对于联系人方法筛选器: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\' );

SO网友:helenhousandi

尽管user_contactmethods filter是用户配置文件屏幕中为数不多的几个字段之一,因为WordPress中不需要其他字段,所以可以使用jQuery的.hide().remove() 有效地删除您不想要的内容,而不会在保存信息方面带来麻烦。当然,没有JS-on的人仍然会看到它们,但这只是一小部分,我猜那里的信息变化实际上不会影响任何东西。

删除整个个人选项的示例(显示管理栏和配色方案)。我知道这并不是你想要的,只是想给你一个我手头上的例子:

// 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
}
此外,还有一个关于显示管理栏选项的注意事项:在3.3中,管理栏将成为标题,因此无法打开或关闭,因此可能不值得担心。

I updated the code example to be more accurate and complete. Had some leftovers in there.

SO网友:tobbe

由于似乎没有好的php钩子,我最终用CSS隐藏字段,然后用JS删除它们。

add_action( \'admin_head\', \'remove_default_profile_fields\' );

function remove_default_profile_fields() {

    global $pagenow;

    if( \'profile.php\' != $pagenow) return;

    remove_action( \'admin_color_scheme_picker\', \'admin_color_scheme_picker\' );

    // <tr> selectors, each containing a field
    $tr = array(
        "tr.user-rich-editing-wrap",
        "tr.user-comment-shortcuts-wrap",
        "tr.user-first-name-wrap",
        "tr.user-last-name-wrap",
        "tr.user-admin-bar-front-wrap",
        "tr.user-profile-picture",
        "tr.user-user-login-wrap",
        "tr.user-display-name-wrap",
        "h2" // Personally I decided to remove all H2 tags too.
    );

    $selectors = implode(", ", $tr);

    // Hide the fields with css, so even if javascript is disabled they wont show up. 
    echo "<style>{$selectors}{display:none;}</style>"; ?>

    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
           // Remove selected <tr>\'s
           $( \'<?= $selectors; ?>\' ).remove();
           // Remove any empty table that may have been left over
           $(".form-table:not(:has(tr))").remove();
        });
    </script>

  <?php
}

SO网友:icc97

wordpress support forum 您可以使用PHP进行删除。这将删除“关于您自己”部分:

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”,然后删除该标题与找到的下一个表(即Password表)之间的任何内容。

还有插件WP Hide Dashboard 如果您想扩展它,则执行类似的jQuery替换。

SO网友:T.Todua

小心

1)Removing a field may not be good, 与更新时一样,如果您不将基本字段发送到WORDPRESS更新挂钩,那么它可能会为这些字段设置空值!(例如,在提交表单中,应该存在,即。<input name="username".../>)
我认为,使用jquery,最好只在视觉上对用户隐藏.hide(); 而不是与.remove();
要隐藏的示例代码“DISPLAY NAME“和”NICKNAME“字段:

jQuery(document).ready(function( $ ){
    $("#nickname,#display_name").parent().parent().hide();
});
(2)To hide admin bar, there is a special option in wordpress menu (in Settings). 对于自定义代码,例如。

add_action(\'after_setup_theme\', \'remove_admin_bar\');

function remove_admin_bar()
{
  if (!current_user_can(\'administrator\') && !is_admin()) 
  {
    show_admin_bar(false);
  }
}

SO网友:Akhil Sharma

使用

add_action(\'admin_head\', \'remove_profile_fields\');
和添加

jQuery(document).ready(function(e) {
在JavaScript之前。

SO网友:EarnestoDev

There\'s no filter to disable them. 查看来源(/wp-admin/user-edit.php) 当你需要做这样的事情时。你可以用JS隐藏它们,但它们仍然可以被显示,并且值会在帖子中更新。

唯一可行的选择是自己破解核心。只需确保您处理了更新,并忽略POST上的这些字段。

结束

相关推荐

插件:Google Analytics for Dashboard错误-时间戳与当前时间相差太远

有人用过Google Analytics for Dashboard 插件?我已经成功安装了它,但每当我尝试使用开始登录过程按钮将其链接到我的Google帐户时,我总是收到一条奇怪的消息,如下所示:Timestamp is too far from current time: <a Unix timestamp here> 我正在使用WordPress 3.1.3。知道这里发生了什么吗?谢谢,我