問題描述

我必須根據使用者角色從’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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。