Come rimuovere questi campi dalla sezione "Profilo"?


16

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

  1. soprannome
  2. Visualizza nome pubblicamente come
  3. Campi AIM, Yahoo, Google talk e Informazioni personali
  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 farlo? Qualsiasi aiuto sarebbe apprezzato. Grazie

EDIT: Grazie @helenhousandi per la risposta. L'avevo già fatto così.

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

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


Dove dovrebbe andare? functions.php?
Fabian,

Sì. Può andare su functions.phpo un file plugin. Finché i ganci sono corretti, funzionerà da entrambi i punti.
Rutwick Gangurde,

Ok, ma se lo inserisco in Functions.php, come posso restituire il javascript? con ritorno o eco?
Fabian,

Sembra che da WordPress v4.4.1, Nickname sia diventato un campo obbligatorio e dia ERRORE: Inserisci un soprannome quando aggiorni un utente con questo nascosto ma non popolato, quindi non puoi più nasconderlo
icc97

Risposte:


15

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

Grazie ... ho questo! Qualcosa per le sezioni "Mostra barra di amministrazione" e "Informazioni personali"?
Rutwick Gangurde,

Ti preghiamo di aggiornare questo se trovi una soluzione ... Sto accettando la tua risposta però. Grazie!
Rutwick Gangurde,

+1 perché, per quanto ricordo, la rimozione dei campi tramite PHP impedisce a WordPress di creare voci vuote nella tabella usermeta.
Ashfame,

9

Sebbene il user_contactmethods filtro sia uno dei pochi per la schermata del profilo utente, poiché gli altri campi non sono richiesti in WordPress, è possibile utilizzare jQuery .hide()e .remove()sbarazzarsi di quelli che non si desidera senza complicazioni in termini di salvataggio delle informazioni . Certo, una persona senza JS su li vedrebbe ancora, ma questa è una piccola minoranza e immagino che le informazioni che cambiano lì in realtà non influenzeranno nulla.

Un esempio di rimozione dell'intero pezzo di opzioni personali (mostra la barra di amministrazione e la combinazione di colori). So che non è esattamente quello che stai cercando, volevo solo darti un rapido esempio che ho a portata di mano:

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

Inoltre, una nota sull'opzione Mostra barra di amministrazione: in 3.3 la barra di amministrazione sta diventando l'intestazione e quindi non può essere attivata o disattivata, quindi potrebbe non valere la pena preoccuparsi.

Ho aggiornato l'esempio di codice per essere più accurato e completo. Aveva degli avanzi li dentro.


Grazie! Questa è una bella soluzione! Quello che ho fatto è stato qualcosa di simile, ma ho usato un gancio di azione diverso in modo che il mio script funzionasse solo su profile.php. Ho anche dovuto farlo per un ruolo personalizzato specifico definito nel mio sistema. Aggiornamento della mia domanda con la risposta.
Rutwick Gangurde,

1
Se aggiungi quanto segue a jQuery nasconderà anche il soprannome e 'Visualizza nome come' dalla domanda:$("#nickname,#display_name").parent().parent().remove();
icc97

Puoi anche usare il hook edit_user_profile. E non utilizzare il metodo jQuery (document) .ready per eseguire il codice istantaneamente. In questo modo
Giraldi

Il soprannome è richiesto ora da WP v.4.4.1
icc97

2

Dato che non sembra esserci un buon hook php per questo ho finito per nascondere i campi con CSS e rimuoverli 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' );

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

1

Dal forum di supporto di wordpress puoi fare la rimozione usando PHP. Ciò rimuove la sezione Informazioni personali:

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

Il codice sostituisce l'intestazione "Informazioni su di te" con "Password" e quindi elimina qualsiasi cosa tra quella e la tabella successiva che trova (che è la tabella delle password).

Anche il plugin WP Hide Dashboard fa jQuery simile sostituendo se si desidera estenderlo.


Per riferimento futuro, potresti voler utilizzare admin_head-profile.phpe admin_footer-profile.phpinvece

1

STAI ATTENTO!!

1) La rimozione di un campo potrebbe non essere buona , come in caso di aggiornamento, se non si inviano i campi essenziali all'hook di aggiornamento WORDPRESS, è possibile che vengano impostati valori vuoti su quei campi! (ad esempio, nel modulo di invio, dovrebbe esistere, ad es. <input name="username".../>)
Penso che sia meglio NASCONDERE dagli utenti solo visivamente, con jquery .hide();e non con il .remove();
codice ESEMPIO per nascondere i campi " DISPLAY NAME " e " NICKNAME ":

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

2) Per nascondere la barra di amministrazione, è disponibile un'opzione speciale nel menu WordPress (in Impostazioni) . per codice personalizzato, come ad es

add_action('after_setup_theme', 'remove_admin_bar');

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

0

Uso

add_action('admin_head', 'remove_profile_fields');

e aggiungi

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

prima di JavaScript.


Una piccola spiegazione sarebbe fantastica!
bravokeyl,

-4

Non esiste un filtro per disabilitarli.Guarda la fonte ( /wp-admin/user-edit.php) quando devi fare cose come questa. Puoi nasconderli con JS ma possono comunque essere resi visibili e i valori vengono aggiornati su POST.

L'unica opzione praticabile è hackerare il core da soli. Assicurati solo di gestire l'aggiornamento e di ignorare questi campi su POST.


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

3
Se l'unica soluzione a cui riesci a pensare è hackerare il core, forse non dovresti rispondere a quella particolare domanda. Inoltre, non è necessario suggerire al richiedente la domanda di esaminare il file già menzionato e inoltre non è corretto affermare che non ci sono filtri - sicuramente devi aver letto prima la domanda e la risposta precedente?
helenhousandi,

@helenhousandi xoxo
EarnestoDev,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.