Cum să elimini aceste câmpuri din secțiunea 'Profil'?

3 nov. 2011, 12:36:53
Vizualizări: 42.2K
Voturi: 22

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:

  1. Poreclă
  2. Afișează numele public ca
  3. Câmpurile AIM, Yahoo, Google Talk și Despre tine
  4. 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.

5
Comentarii

Unde ar trebui să pun asta? functions.php?

Fabian Fabian
22 ian. 2016 15:16:40

Da. Poți să o pui în functions.php sau într-un fișier de plugin. Atâta timp cât hook-urile sunt corecte, va funcționa din ambele locații.

Rutwick Gangurde Rutwick Gangurde
22 ian. 2016 18:46:12

Ok, dar dacă o pun în functions.php, cum returnez javascript-ul? cu return sau echo?

Fabian Fabian
25 ian. 2016 17:31:25

Se pare că de la WordPress v4.4.1, Pseudonimul a devenit un câmp obligatoriu și afișează EROARE: Vă rugăm să introduceți un pseudonim când actualizați un utilizator cu acest câmp ascuns dar necompletat, așa că nu-l mai puteți pur și simplu ascunde

icc97 icc97
7 apr. 2016 01:08:38

Este 2022 și secțiunile de profil încă nu sunt încadrate cu un ID unic.. ei bine.

mike23 mike23
16 aug. 2022 13:52:41
Toate răspunsurile la întrebare 7
3
20

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' );
3 nov. 2011 13:08:03
Comentarii

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

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

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

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

+1 pentru că din câte îmi amintesc, eliminarea câmpurilor prin PHP oprește și WordPress să creeze intrări goale în tabelul usermeta.

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

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.

3 nov. 2011 16:36:25
Comentarii

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.

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

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

icc97 icc97
1 feb. 2012 10:16:46

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

Giraldi Giraldi
30 mai 2012 10:24:46

Porecla este obligatorie începând cu WP v.4.4.1

icc97 icc97
7 apr. 2016 01:09:42
0

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
}
10 sept. 2017 19:28:53
0

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);
  }
}
23 sept. 2014 10:35:25
1

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.

1 feb. 2012 09:53:06
Comentarii

Pentru referință viitoare, poți dori să folosești admin_head-profile.php și admin_footer-profile.php în schimb

User User
18 mar. 2012 16:28:50
1

Folosește

add_action('admin_head', 'remove_profile_fields');

și adaugă

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

înainte de JavaScript.

22 sept. 2016 08:04:00
Comentarii

O mică explicație ar fi minunată!

bravokeyl bravokeyl
22 sept. 2016 10:13:26
3
-5

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.

3 nov. 2011 14:23:32
Comentarii

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

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

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?

helenhousandi helenhousandi
3 nov. 2011 16:53:31

@helenhousandi xoxo

EarnestoDev EarnestoDev
3 nov. 2011 16:58:48