Como remover esses campos da seção 'Perfil'?

14

Eu tenho que remover alguns campos de perfil da página "Perfil" de acordo com as funções do usuário. Para remover o seletor de cores, usei remove_action("admin_color_scheme_picker", "admin_color_scheme_picker") . Eu quero remover esses campos:

  1. Apelido
  2. Exibe o nome publicamente como
  3. AIM, Yahoo, Google Talk e Sobre você mesmo campos
  4. A seção "Mostrar barra de administração" junto com as duas caixas de seleção

Eu passei pelo arquivo 'user-edit.php' para ver se há alguma ação / filtro que me permita fazer isso, mas parece que não há. Alguém pode me dizer como fazer isso? Qualquer ajuda seria apreciada. Obrigado

EDITAR: Obrigado @helenhousandi pela resposta. Eu já tinha feito dessa maneira embora.

<?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 }
}
?>

Eu sei que isso é um pouco mais longo, mas funcionou! Acho que vou com a resposta do @helenhousandi.

    
por Rutwick Gangurde 03.11.2011 / 11:36

7 respostas

14

Para o filtro de métodos de contato: 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' );
    
por Chris_O 03.11.2011 / 12:08
9

Embora o filtro user_contactmethods seja um dos poucos para a tela de perfil do usuário, já que o outros campos não são necessários no WordPress, você pode usar o .hide() e .remove() do jQuery para efetivamente se livrar daqueles que você não quer sem complicações em termos de salvar as informações. Claro, uma pessoa sem JS ainda iria vê-los, mas isso é uma pequena minoria e eu estou supondo que a informação que está mudando não afetará nada.

Um exemplo de remoção de toda a parte de opções pessoais (mostra a barra de administração e o esquema de cores). Eu sei que não é exatamente o que você está procurando, só queria dar um exemplo rápido que tenho em mãos:

// 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
}

Além disso, uma nota sobre a opção Mostrar barra de administração: na 3.3, a barra de administração está se tornando o cabeçalho e, portanto, não pode ser ativada ou desativada, portanto, pode não valer a pena se preocupar.

Atualizei o exemplo de código para ser mais preciso e completo. Teve algumas sobras lá dentro.

    
por helenhousandi 03.11.2011 / 15:36
1

Do fórum de suporte do wordpress você pode fazer a remoção usando o PHP. Isso remove a seção Sobre você mesmo:

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');

O código substitui o cabeçalho "About Yourself" por "Password" e, em seguida, retira qualquer coisa entre a tabela e a próxima tabela encontrada (que é a tabela de senha).

Além disso, o plugin WP Hide Dashboard faz com que o jQuery seja substituído se você quiser estender isso.

    
por icc97 01.02.2012 / 08:53
1

TENHA CUIDADO !!

1) Remover um campo pode não ser bom , como na atualização, se você não enviar os campos essenciais para o hook de atualização do WORDPRESS, então ele pode definir valores vazios para esses campos! (por exemplo, no formulário de envio, deve existir, por exemplo, <input name="username".../> )
Acho que é melhor ocultar apenas dos usuários visualmente, com jquery .hide(); e não com .remove();
EXEMPLO código para ocultar os campos " DISPLAY NAME " e " NICKNAME ":

jQuery(document).ready(function( $ ){
    $("#nickname,#display_name").parent().parent().hide();
});

2) Para ocultar a barra de administração, há uma opção especial no menu wordpress (em Configurações) . para código personalizado, como, por exemplo,

add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar()
{
  if (!current_user_can('administrator') && !is_admin()) 
  {
    show_admin_bar(false);
  }
}
    
por T.Todua 23.09.2014 / 09:35
1

Como parece não haver um bom php hook para isso acabei escondendo os campos com CSS e depois removendo-os com 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
}
    
por Tobbe 10.09.2017 / 18:28
0

Use

add_action('admin_head', 'remove_profile_fields');

e adicione

jQuery(document).ready(function(e) {

antes do JavaScript.

    
por Akhil Sharma 22.09.2016 / 07:04
-4

Não há filtro para desativá-los. Veja a origem ( /wp-admin/user-edit.php ) quando precisar fazer coisas como essa. Você pode ocultá-los com o JS, mas eles ainda podem ser visíveis e os valores são atualizados no POST.

Apenas a opção viável é hackear o núcleo. Apenas certifique-se de lidar com a atualização e desconsidere esses campos no POST.

    
por EarnestoDev 03.11.2011 / 13:23