Jak usunąć te pola z sekcji „Profil”?


16

Muszę usunąć niektóre pola profilu ze strony „Profil” zgodnie z rolami użytkownika. Do usunięcia próbnika kolorów użyłem remove_action("admin_color_scheme_picker", "admin_color_scheme_picker"). Chcę usunąć te pola:

  1. Przezwisko
  2. Wyświatlaj imie publicznie jako
  3. Pola AIM, Yahoo, Google talk i O sobie
  4. Sekcja „Pokaż pasek administratora” wraz z 2 polami wyboru

Przeszedłem przez plik „user-edit.php”, aby sprawdzić, czy są jakieś akcje / filtry, które pozwalają mi to zrobić, ale wygląda na to, że nie ma. Czy ktoś może mi powiedzieć, jak to zrobić? Każda pomoc będzie mile widziana. Dzięki

EDYCJA: Dzięki @helenhousandi za odpowiedź. Ale już tak to zrobiłem.

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

Wiem, że to trochę dłużej, ale zadziałało! Myślę, że pójdę z odpowiedzią @ helenhousandi.


Gdzie to powinno iść? functions.php?
Fabian

Tak. Może przejść do functions.phplub pliku wtyczki. Dopóki haki są prawidłowe, będzie działać z dowolnego miejsca.
Rutwick Gangurde

Ok, ale jeśli wstawię to do pliku functions.php, jak zwrócić javascript? z powrotem czy echo?
Fabian

Wygląda na to, że od WordPress v4.4.1 Pseudonim stał się polem wymaganym i podaje BŁĄD: Wprowadź Pseudonim podczas aktualizacji użytkownika z tym ukrytym, ale nie wypełnionym, więc nie możesz go po prostu ukryć
icc97

Odpowiedzi:


15

Dla filtra metod kontaktowych 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' );

Dzięki ... mam to! Coś w sekcjach „Pokaż pasek administratora” i „O sobie”?
Rutwick Gangurde,

Zaktualizuj to, jeśli znajdziesz rozwiązanie ... Akceptuję twoją odpowiedź. Dzięki!
Rutwick Gangurde,

+1, ponieważ o ile pamiętam usuwanie pól przez PHP również powstrzymuje WordPress przed tworzeniem pustych wpisów w tabeli usermeta.
Ashfame,

9

Chociaż user_contactmethodsfiltr jest jednym z nielicznych dla ekranu profilu użytkownika, ponieważ inne pola nie są wymagane w WordPress, możesz użyć jQuery .hide()i .remove()skutecznie pozbyć się tych, których nie chcesz, bez komplikacji w zakresie zapisywania informacji . Jasne, osoba bez JS nadal by je widziała, ale to niewielka mniejszość i domyślam się, że zmieniające się tam informacje w rzeczywistości nic nie wpłyną.

Przykład usunięcia całego elementu opcji osobistych (pokaż pasek administratora i schemat kolorów). Wiem, że nie jest to dokładnie to, czego szukasz, chciałem tylko dać ci szybki przykład, który mam pod ręką:

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

Również uwaga na temat opcji Pokaż pasek administratora: w 3.3 pasek administratora staje się nagłówkiem, dlatego nie można go włączać ani wyłączać, więc nie warto się martwić.

Zaktualizowałem przykład kodu, aby był bardziej dokładny i kompletny. Miałem tam trochę resztek.


Dzięki! To miłe rozwiązanie! To, co zrobiłem, było podobne, ale użyłem innego haka akcji, aby mój skrypt działał tylko na profile.php. Musiałem to również zrobić dla określonej niestandardowej roli zdefiniowanej w moim systemie. Aktualizacja mojego pytania z odpowiedzią.
Rutwick Gangurde,

1
Jeśli dodasz do jQuery następujące elementy, ukryje ono także pseudonim i „Wyświetl nazwę jako” w pytaniu:$("#nickname,#display_name").parent().parent().remove();
icc97

Możesz także użyć haka edit_user_profile. I nie używaj metody jQuery (document) .ready do natychmiastowego uruchomienia kodu. W ten sposób
Giraldi

Pseudonim jest teraz wymagany od wersji WP 4.4.4
icc97

2

Ponieważ wydaje się, że nie ma dobrego haka php do tego, ukryłem pola za pomocą CSS, a następnie usunąłem je za pomocą 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

Z forum wsparcia wordpress można usunąć za pomocą PHP. Spowoduje to usunięcie sekcji O sobie:

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

Kod zamienia nagłówek „About Yourself” na „Password”, a następnie usuwa wszystko między tą a następną znalezioną tabelą (która jest tabelą haseł).

Również wtyczka WP Hide Dashboard dokonuje podobnej wymiany jQuery, jeśli chcesz ją rozszerzyć.


Do wykorzystania w przyszłości, możesz chcieć użyć, admin_head-profile.phpa admin_footer-profile.phpzamiast tego

1

BĄDŹ OSTROŻNY!!

1) Usunięcie pola może nie być dobre , ponieważ podczas aktualizacji, jeśli nie wyślesz niezbędnych pól do haka aktualizacji WORDPRESS, może ustawić puste wartości w tych polach! (na przykład w formularzu do przesłania powinien istnieć np. <input name="username".../>)
Myślę, że lepiej ukrywać przed użytkownikami tylko wizualnie, używając jquery, .hide();a nie .remove();
kodu PRZYKŁADOWEGO, aby ukryć pola „ DISPLAY NAME ” i „ NICKNAME ”:

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

2) Aby ukryć pasek administratora, istnieje specjalna opcja w menu wordpress (w Ustawieniach) . dla niestandardowego kodu, np

add_action('after_setup_theme', 'remove_admin_bar');

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

0

Posługiwać się

add_action('admin_head', 'remove_profile_fields');

i dodaj

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

przed JavaScript.


Małe wyjaśnienie byłoby świetne!
bravokeyl

-4

Nie ma filtru, aby je wyłączyć. Spójrz na źródło (/wp-admin/user-edit.php ), kiedy musisz robić takie rzeczy. Możesz je ukryć za pomocą JS, ale nadal mogą być widoczne, a wartości są aktualizowane w POST.

Jedyną realną opcją jest samodzielne zhakowanie rdzenia. Tylko upewnij się, że poradzisz sobie z aktualizacją i zignoruj ​​te pola w POST.


Tak, sprawdziłem już ten plik! Rozwiązanie JS nie wydaje się zbyt bezpieczne. Zobaczę co da się zrobić! Dzięki!
Rutwick Gangurde

3
Jeśli jedynym rozwiązaniem, które możesz wymyślić, jest zhakowanie rdzenia, być może nie powinieneś odpowiedzieć na to konkretne pytanie. Nie musisz też sugerować pytającemu, aby przejrzał już wspomniany plik, a także nie masz racji twierdząc, że nie ma żadnych filtrów - na pewno najpierw przeczytałeś pytanie i wcześniejszą odpowiedź?
helenhousandi

@helenhousandi xoxo
EarnestoDev
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.