Come rimuovere questi campi dalla sezione 'Profilo'?
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:
- Nickname
- Nome da visualizzare pubblicamente
- Campi AIM, Yahoo, Google talk e Informazioni su di te
- 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.
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 risolto questo! Hai qualcosa per le sezioni 'Mostra Barra di Amministrazione' e 'Informazioni su di te'?

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

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.

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.

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

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

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
}

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

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à.

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.

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

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?
