Come rimuovere questi campi dalla sezione 'Profilo'?

3 nov 2011, 12:36:53
Visualizzazioni: 42.2K
Voti: 22

Devo rimuovere alcuni campi del profilo dalla pagina 'Profilo' in base ai ruoli utente. Per rimuovere il selettore di colori ho usato remove_action("admin_color_scheme_picker", "admin_color_scheme_picker"). Voglio rimuovere questi campi:

  1. Nickname
  2. Nome da visualizzare pubblicamente
  3. Campi AIM, Yahoo, Google talk e Informazioni su di te
  4. La sezione 'Mostra barra di amministrazione' insieme alle 2 caselle di controllo

Ho esaminato il file 'user-edit.php' per vedere se ci sono azioni/filtri che mi permettono di farlo, ma sembra che non ci siano. Qualcuno può dirmi come fare? Ogni aiuto sarà apprezzato. Grazie

MODIFICA: Grazie @helenhousandi per la risposta. Avevo già fatto in questo modo comunque.

<?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('Opzioni personali')").next('.form-table').remove();
            jQuery("h3:contains('Opzioni personali')").remove();
            jQuery("h3:contains('Informazioni su di te')").next('.form-table').remove();
            jQuery("h3:contains('Informazioni su di te')").remove();
        </script>
<?php }
}
?>

So che questo è un po' più lungo, ma ha funzionato! Penso che seguirò la risposta di @helenhousandi.

5
Commenti

Dove dovrei metterlo? functions.php?

Fabian Fabian
22 gen 2016 15:16:40

Sì. Puoi inserirlo in functions.php o in un file di plugin. Finché gli hook sono corretti, funzionerà da entrambi i posti.

Rutwick Gangurde Rutwick Gangurde
22 gen 2016 18:46:12

Ok, ma se lo metto in functions.php, come restituisco il javascript? Con return o echo?

Fabian Fabian
25 gen 2016 17:31:25

Sembra che da WordPress v4.4.1, il Nickname sia diventato un campo obbligatorio e restituisce ERRORE: Inserisci un Nickname quando si aggiorna un utente con questo campo nascosto ma non compilato, quindi non puoi più semplicemente nasconderlo

icc97 icc97
7 apr 2016 01:08:38

Siamo nel 2022 e le sezioni del profilo non sono ancora racchiuse con un ID univoco.. pazienza.

mike23 mike23
16 ago 2022 13:52:41
Tutte le risposte alla domanda 7
3
20

Per il filtro dei metodi di contatto: 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' );
3 nov 2011 13:08:03
Commenti

Grazie... ho risolto questo! Hai qualcosa per le sezioni 'Mostra Barra di Amministrazione' e 'Informazioni su di te'?

Rutwick Gangurde Rutwick Gangurde
3 nov 2011 13:48:12

Per favore aggiorna questo se trovi una soluzione... Accetto comunque la tua risposta. Grazie!

Rutwick Gangurde Rutwick Gangurde
3 nov 2011 16:35:05

+1 perché per quanto ricordo, rimuovere i campi tramite PHP impedisce anche a WordPress di creare voci vuote nella tabella usermeta.

Ashfame Ashfame
9 apr 2012 16:12:09
4
10

Anche se il filtro user_contactmethods è uno dei pochi disponibili per la schermata del profilo utente, poiché gli altri campi non sono obbligatori in WordPress, potresti usare i metodi jQuery .hide() e .remove() per eliminare efficacemente quelli che non desideri senza complicazioni in termini di salvataggio delle informazioni. Certo, una persona senza JavaScript attivato li vedrebbe ancora, ma si tratta di una minoranza e presumo che la modifica di quelle informazioni non influirebbe effettivamente su nulla.

Un esempio per rimuovere l'intera sezione delle opzioni personali (barra di amministrazione e schema colore). So che non è esattamente quello che stai cercando, ma volevo darti un esempio rapido che ho a portata di mano:

// rimuovi il blocco delle opzioni personali
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
}

Inoltre, una nota sull'opzione "Mostra barra di amministrazione": dalla versione 3.3 la barra di amministrazione diventa l'intestazione e quindi non può essere attivata o disattivata, quindi potrebbe non valere la pena preoccuparsene.

Ho aggiornato l'esempio di codice per renderlo più preciso e completo. C'erano alcuni residui.

3 nov 2011 16:36:25
Commenti

Grazie! Questa è una bella soluzione! Quello che ho fatto è stato simile ma ho usato un diverso hook per azione in modo che il mio script venga eseguito solo su profile.php. Avevo anche bisogno di farlo per un ruolo personalizzato specifico definito nel mio sistema. Aggiorno la mia domanda con la risposta.

Rutwick Gangurde Rutwick Gangurde
12 nov 2011 13:10:15

Se aggiungi il seguente codice a jQuery nasconderà anche il Nickname e 'Mostra nome come' dalla domanda: $("#nickname,#display_name").parent().parent().remove();

icc97 icc97
1 feb 2012 10:16:46

Puoi anche usare l'hook edit_user_profile. E non usare il metodo jQuery( document ).ready per eseguire il codice immediatamente. Come questo

Giraldi Giraldi
30 mag 2012 10:24:46

Il nickname è ora obbligatorio a partire da WP v.4.4.1

icc97 icc97
7 apr 2016 01:09:42
0

Dato che non sembra esserci un buon hook PHP per questo, alla fine ho nascosto i campi con CSS e poi li ho rimossi con 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' );

    // Selettori <tr>, ognuno contenente un campo
    $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" // Personalmente ho deciso di rimuovere anche tutti i tag H2.
    );

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

    // Nascondi i campi con CSS, così anche se JavaScript è disabilitato non verranno visualizzati.
    echo "<style>{$selectors}{display:none;}</style>"; ?>

    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
           // Rimuovi i <tr> selezionati
           $( '<?= $selectors; ?>' ).remove();
           // Rimuovi qualsiasi tabella vuota che potrebbe essere rimasta
           $(".form-table:not(:has(tr))").remove();
        });
    </script>

  <?php
}
10 set 2017 19:28:53
0

ATTENZIONE!!

1) Rimuovere un campo potrebbe non essere una buona idea, poiché durante l'aggiornamento, se non invii i campi essenziali all'hook di aggiornamento di WORDPRESS, potrebbe impostare valori vuoti per quei campi! (ad esempio, in un form di invio, dovrebbe esistere <input name="username".../>)
Penso che sia meglio NASCONDERE solo visivamente agli utenti, con jquery .hide(); e non con .remove();
CODICE di esempio per nascondere i campi "NOME VISUALIZZATO" e "SOPRANNOME":

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

2) Per nascondere la barra di amministrazione, c'è un'opzione speciale nel menu di wordpress (in Impostazioni). Per codice personalizzato, come ad esempio:

add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar()
{
  if (!current_user_can('administrator') && !is_admin()) 
  {
    show_admin_bar(false);
  }
}
23 set 2014 10:35:25
1

Dal forum di supporto di WordPress puoi effettuare la rimozione utilizzando PHP. Questo codice rimuove la sezione "Informazioni su di te":

if (! function_exists('remove_plain_bio') ){
    function remove_plain_bio($buffer) {
        $titles = array('#<h3>Informazioni su di te</h3>#','#<h3>Informazioni sull\'utente</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');

Il codice sostituisce l'intestazione "Informazioni su di te" con "Password" e poi rimuove tutto ciò che si trova tra questa e la tabella successiva (che è la tabella della password).

Inoltre, il plugin WP Hide Dashboard effettua una sostituzione simile con jQuery se vuoi estendere questa funzionalità.

1 feb 2012 09:53:06
Commenti

Per riferimento futuro, potresti voler utilizzare admin_head-profile.php e admin_footer-profile.php invece

User User
18 mar 2012 16:28:50
1

Utilizza

add_action('admin_head', 'remove_profile_fields');

e aggiungi

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

prima del JavaScript.

22 set 2016 08:04:00
Commenti

Una piccola spiegazione sarebbe fantastica!

bravokeyl bravokeyl
22 set 2016 10:13:26
3
-5

Non esiste un filtro per disabilitarli. Guarda il codice sorgente (/wp-admin/user-edit.php) quando hai bisogno di fare operazioni come questa. Potresti nasconderli con JS ma possono comunque essere resi visibili e i valori vengono aggiornati in POST.

L'unica opzione praticabile è modificare il core manualmente. Assicurati solo di gestire l'aggiornamento e di ignorare questi campi durante la richiesta POST.

3 nov 2011 14:23:32
Commenti

Sì, ho già controllato quel file! La soluzione JS non sembra molto sicura. Vedrò cosa posso fare! Grazie!

Rutwick Gangurde Rutwick Gangurde
3 nov 2011 16:34:08

Se l'unica soluzione a cui riesci a pensare è modificare il core, allora forse non dovresti rispondere a questa specifica domanda. Inoltre, non è necessario suggerire all'utente di guardare il file già menzionato, e non è corretto affermare che non ci siano filtri - sicuramente avrai letto la domanda e la risposta precedente prima?

helenhousandi helenhousandi
3 nov 2011 16:53:31

@helenhousandi xoxo

EarnestoDev EarnestoDev
3 nov 2011 16:58:48