Cum să elimini aceste câmpuri din secțiunea 'Profil'?
Trebuie să elimin câteva câmpuri din pagina 'Profil' în funcție de rolurile utilizatorilor. Pentru eliminarea selectorului de culoare am folosit remove_action("admin_color_scheme_picker", "admin_color_scheme_picker")
. Vreau să elimin aceste câmpuri:
- Poreclă
- Afișează numele public ca
- Câmpurile AIM, Yahoo, Google Talk și Despre tine
- Secțiunea 'Arată Bara de Admin' împreună cu cele 2 căsuțe de bifare
Am verificat fișierul 'user-edit.php' pentru a vedea dacă există acțiuni/filtre care să-mi permită să fac acest lucru, dar se pare că nu există. Poate cineva să-mi spună cum să fac asta? Orice ajutor ar fi apreciat. Mulțumesc
EDITARE: Mulțumesc @helenhousandi pentru răspuns. Oricum făcusem deja în acest mod.
<?php
add_action('admin_footer-profile.php', 'remove_profile_fields');
function remove_profile_fields()
{
if(current_user_can('custom_role'))
{ ?>
<script type="text/javascript">
// Elimină tabelul de opțiuni personale și titlul său
jQuery("h3:contains('Opțiuni Personale')").next('.form-table').remove();
jQuery("h3:contains('Opțiuni Personale')").remove();
// Elimină tabelul Despre Tine și titlul său
jQuery("h3:contains('Despre Tine')").next('.form-table').remove();
jQuery("h3:contains('Despre Tine')").remove();
</script>
<?php }
}
?>
Știu că este puțin mai lung, dar a funcționat! Cred că voi merge cu răspunsul lui @helenhousandi.

Pentru filtrul metodelor de contact: 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' );

Mulțumesc... am înțeles acest lucru! Ceva pentru secțiunile 'Show Admin Bar' și 'About yourself'?

Te rog actualizează dacă găsești o soluție... Totuși accept răspunsul tău. Mulțumesc!

Deși filtrul user_contactmethods
este unul dintre puținele disponibile pentru ecranul de profil al utilizatorului, având în vedere că celelalte câmpuri nu sunt obligatorii în WordPress, ai putea folosi metodele jQuery .hide()
și .remove()
pentru a elimina eficient cele pe care nu le dorești, fără complicații legate de salvarea informațiilor. Desigur, o persoană care nu folosește JS le-ar putea vedea în continuare, dar aceasta reprezintă o minoritate mică și presupun că modificarea acestor informații nu va afecta cu adevărat nimic.
Iată un exemplu de eliminare a întregii secțiuni de opțiuni personale (afișarea barei de administrare și schema de culori). Știu că nu este exact ceea ce cauți, dar am vrut să îți ofer un exemplu rapid pe care îl am la îndemână:
// elimină blocul de opțiuni personale
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
}
De asemenea, o observație despre opțiunea "Show Admin Bar": începând cu versiunea 3.3, bara de administrare devine antetul și, prin urmare, nu mai poate fi activată sau dezactivată, așa că poate nu merită să te îngrijorezi în legătură cu aceasta.
Am actualizat exemplul de cod pentru a fi mai precis și complet. Mai erau câteva resturi în el.

Mulțumesc! Aceasta este o soluție bună! Ce am făcut eu a fost ceva similar, dar am folosit un alt action hook, astfel încât scriptul meu să ruleze doar pe profile.php
. De asemenea, am avut nevoie să fac asta pentru un rol personalizat specific definit în sistemul meu. Actualizez întrebarea mea cu răspunsul.

Dacă adaugi următoarea linie de cod jQuery, va ascunde și Nickname-ul și opțiunea 'Display Name as' din întrebare: $("#nickname,#display_name").parent().parent().remove();

Poți folosi și hook-ul edit_user_profile. Și nu este nevoie să folosești metoda jQuery( document ).ready pentru a rula codul instantaneu. Ca aici

Deoarece nu există un hook PHP adecvat pentru această funcționalitate, am ajuns să ascund câmpurile cu CSS și apoi să le elimin cu JavaScript.
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' );
// Selectori <tr>, fiecare conținând un câmp
$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" // Personal, am decis să elimin și toate tag-urile H2.
);
$selectors = implode(", ", $tr);
// Ascunde câmpurile cu CSS, astfel încât chiar dacă JavaScript este dezactivat, ele nu vor apărea.
echo "<style>{$selectors}{display:none;}</style>"; ?>
<script type="text/javascript">
jQuery( document ).ready(function( $ ){
// Elimină <tr>-urile selectate
$( '<?= $selectors; ?>' ).remove();
// Elimină orice tabel gol care ar fi putut rămâne
$(".form-table:not(:has(tr))").remove();
});
</script>
<?php
}

ATENȚIE!!
1) Eliminarea unui câmp poate să nu fie o idee bună, deoarece la actualizare, dacă nu trimiți câmpurile esențiale către hook-ul de actualizare WORDPRESS, acesta ar putea să seteze valori goale pentru acele câmpuri! (de exemplu, în trimiterea formularului, ar trebui să existe i.e. <input name="username".../>
)
Cred că este mai bine să ASCUNDEM câmpurile de utilizatori doar vizual, cu jQuery .hide();
și nu cu .remove();
EXEMPLU de cod pentru a ascunde câmpurile "NUME AFIȘAT" și "PSEUDONIM":
jQuery(document).ready(function( $ ){
$("#nickname,#display_name").parent().parent().hide();
});
2) Pentru a ascunde bara de administrare, există o opțiune specială în meniul WordPress (în Setări). Pentru cod personalizat, cum ar fi i.e.
add_action('after_setup_theme', 'remove_admin_bar');
function remove_admin_bar()
{
if (!current_user_can('administrator') && !is_admin())
{
show_admin_bar(false);
}
}

Din forumul de suport WordPress poți face eliminarea folosind PHP. Acest cod elimină secțiunea Despre Tine:
if (! function_exists('remove_plain_bio') ){
function remove_plain_bio($buffer) {
$titles = array('#<h3>Despre Tine</h3>#','#<h3>Despre utilizator</h3>#');
$buffer=preg_replace($titles,'<h3>Parolă</h3>',$buffer,1);
$biotable='#<h3>Parolă</h3>.+?<table.+?/tr>#s';
$buffer=preg_replace($biotable,'<h3>Parolă</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');
Codul înlocuiește antetul 'Despre Tine' cu 'Parolă' și apoi elimină totul între acesta și următorul tabel găsit (care este tabelul parolei).
De asemenea, pluginul WP Hide Dashboard face o înlocuire similară cu jQuery dacă dorești să extinzi asta.

Nu există niciun filtru pentru a le dezactiva. Verifică codul sursă (/wp-admin/user-edit.php
) când ai nevoie să faci astfel de modificări. Le poți ascunde cu JS, dar pot fi făcute vizibile din nou, iar valorile sunt actualizate la POST.
Singura opțiune viabilă este să modifici tu nucleul. Asigură-te că gestionezi actualizarea și ignori aceste câmpuri la POST.

Da, am verificat deja acel fișier! Soluția JS nu pare prea sigură. O să văd ce pot face! Mulțumesc!

Dacă singura soluție la care te poți gândi este să hack-uiesti core-ul, atunci poate că nu ar trebui să răspunzi la acea întrebare anume. De asemenea, nu e nevoie să sugerezi persoanei care a pus întrebarea să se uite la fișierul deja menționat, și nici nu ai dreptate când spui că nu există deloc filtre - cu siguranță ai citit întrebarea și răspunsul anterior mai întâi?
