从profile.php中删除个人资料图片选项(和其他内容)(在admin中)

时间:2015-12-12 作者:C C

刚刚升级到WordPress 4.4,我现在注意到我的用户档案页面在admin中,有一个叫做“档案图片”的部分,其中有一个指向Gravatar的链接。

我正在开发的插件在配置文件中限制了很多内容。php;不幸的是,通过jQuery从DOM中删除:

jQuery( document ).ready(function() {
    jQuery( "h2:contains(\'Personal Options\')" ).remove();
    jQuery( "h2:contains(\'Name\')" ).remove();
    jQuery( "h2:contains(\'Contact Info\')" ).remove();
    jQuery( "h2:contains(\'About Yourself\')" ).remove();
    jQuery( "h2:contains(\'Account Management\')" ).remove();
    jQuery( "tr.show-admin-bar" ).parents("table:first").remove();
    jQuery( "tr.user-first-name-wrap" ).remove();
    jQuery( "tr.user-last-name-wrap" ).remove();
    jQuery( "tr.user-nickname-wrap" ).remove();
    jQuery( "tr.user-display-name-wrap" ).remove();
    jQuery( "tr.user-url-wrap" ).remove();
    jQuery( "tr.user-description-wrap").parents("table:first").remove();
    jQuery( ".user-sessions-wrap" ).remove();
});
在我继续学习jQuery上瘾之前,有没有更好的方法来做到这一点(除了替换输出缓冲区之外)?另外,是否有其他专门针对用户配置文件图片的设置,或者这个jQuery解决方案将是目前的答案?

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

我们可以使用show_avatars 选项删除配置文件图片部分。

我们可以访问/wp-admin/options.php 手动关闭。

或更新为:

update_option( \'show_avatars\', 0 );
或通过过滤器对其进行修改:

add_filter( \'option_show_avatars\', \'__return_false\' );
我们还可以将其限制在profile.php 页码:

add_action( \'load-profile.php\', function()
{
   add_filter( \'option_show_avatars\', \'__return_false\' );
} );

SO网友:Phill Healey

有一些钩子可以删除配置文件页面的某些部分。此外,您可以使用php缓冲页面输出,然后剥离相关内容。

// Remove fields from Admin profile page
if (!function_exists(\'CCK_remove_profile_options\')) {
function CCK_remove_profile_options($subject)
{
    $subject = preg_replace(\'#<h2>\' . __("Personal Options") . \'</h2>#s\', \'\', $subject, 1); // Remove the "Personal Options" title
    $subject = preg_replace(\'#<tr class="user-syntax-highlighting-wrap(.*?)</tr>#s\', \'\', $subject, 1); // Remove the "Syntax Highlighting" field
    $subject = preg_replace(\'#<tr class="user-rich-editing-wrap(.*?)</tr>#s\', \'\', $subject, 1); // Remove the "Visual Editor" field
    $subject = preg_replace(\'#<tr class="user-comment-shortcuts-wrap(.*?)</tr>#s\', \'\', $subject, 1); // Remove the "Keyboard Shortcuts" field
    $subject = preg_replace(\'#<tr class="show-admin-bar(.*?)</tr>#s\', \'\', $subject, 1); // Remove the "Toolbar" field
    //$subject = preg_replace(\'#<h2>\'.__("Name").\'</h2>#s\', \'\', $subject, 1); // Remove the "Name" title
    //$subject = preg_replace(\'#<tr class="user-display-name-wrap(.*?)</tr>#s\', \'\', $subject, 1); // Remove the "Display name publicly as" field
    $subject = preg_replace(\'#<h2>\' . __("Contact Info") . \'</h2>#s\', \'<h2>\' . __("Login Management") . \'</h2>\', $subject, 1); // Remove the "Contact Info" title
    $subject = preg_replace(\'#<tr class="user-url-wrap(.*?)</tr>#s\', \'\', $subject, 1); // Remove the "Website" field
    $subject = preg_replace(\'#<tr class="user-googleplus-wrap(.*?)</tr>#s\', \'\', $subject, 1); // Remove the "Google+" field
    $subject = preg_replace(\'#<tr class="user-twitter-wrap(.*?)</tr>#s\', \'\', $subject, 1); // Remove the "Website" field
    $subject = preg_replace(\'#<tr class="user-facebook-wrap(.*?)</tr>#s\', \'\', $subject, 1); // Remove the "Website" field
    $subject = preg_replace(\'#<h2>\' . __("Account Management") . \'</h2>#s\', \'\', $subject, 1); // Remove the "About Yourself" title
    $subject = preg_replace(\'#<h2>\' . __("About Yourself") . \'</h2>#s\', \'\', $subject, 1); // Remove the "About Yourself" title
    $subject = preg_replace(\'#<h2>\' . __("About the user") . \'</h2>#s\', \'\', $subject, 1); // Remove the "About Yourself" title
    $subject = preg_replace(\'#<tr class="user-description-wrap(.*?)</tr>#s\', \'\', $subject, 1); // Remove the "Biographical Info" field
    //$subject = preg_replace(\'#<tr class="user-profile-picture(.*?)</tr>#s\', \'\', $subject, 1); // Remove the "Profile Picture" field

    //$subject = preg_replace(\'#<h3>\' . __("User Expiry Information") . \'</h3>#s\', \'\', $subject, 1); // Remove the "Expire Users Data" title
    return $subject;
}

function CCK_profile_subject_start()
{
    //if ( /*!*/ current_user_can(\'manage_options\') ) {
    ob_start(\'CCK_remove_profile_options\');
    //}
}

function CCK_profile_subject_end()
{
    //if ( /*!*/ current_user_can(\'manage_options\') ) {
    ob_end_flush();
    //}
}
}
add_action(\'admin_head\', \'CCK_profile_subject_start\');
add_action(\'admin_footer\', \'CCK_profile_subject_end\');
// Removes ability to change Theme color for the users
remove_action(\'admin_color_scheme_picker\', \'admin_color_scheme_picker\'); 

SO网友:Mark Kaplun

从DOM中删除东西并不是真正删除它们。如果您想要的只是更好的GUI,那么它可能是一种有效的技术,但如果您想要实际防止人们在这些字段上捣乱(比如出于安全原因),那么这还不够。

你的代码可能有一个更大的问题,那就是你试图识别文本,这意味着插件在非英语安装时会失败,有时甚至在英语安装时也会失败。

下一个问题是,其他插件可能会添加自己的字段,从而使页面出现奇怪的显示。

如果您需要一个非常严格控制的概要文件页面,那么您应该编写一个页面,并且只允许用户访问它。内置配置文件页面目前不够灵活,无法轻松添加/删除或更改其各个组件的权限(这是一个一般性的声明,有些组件比其他组件更灵活)。

SO网友:Por

下面是简单的解决方案,添加更多ID以隐藏更多字段

<script type="text/javascript">/* <![CDATA[ */
var hideFields = [ "aim", "yim", "jabber" ];
jQuery.each( jQuery( "form#your-profile tr" ), function() {
    var field = jQuery( this ).find( "input,textarea,select" ).attr( "id" );
    if ( hideFields.indexOf( field ) != -1 ) {
        jQuery( this ).remove();
    }
});
/* ]]> */</script>
或者你可以使用Hide Profile fields plugin