Bagaimana cara menghapus bidang ini dari bagian 'Profil'?

16

Saya harus menghapus beberapa bidang profil dari halaman 'Profil' sesuai dengan peran pengguna. Untuk menghapus color picker yang saya gunakan remove_action("admin_color_scheme_picker", "admin_color_scheme_picker"). Saya ingin menghapus bidang ini:

  1. Nama panggilan
  2. Tampilkan nama secara publik sebagai
  3. AIM, Yahoo, Google talk, dan Tentang diri Anda bidang
  4. Bagian 'Tampilkan Bilah Admin' bersama dengan 2 kotak centang

Saya memeriksa file 'user-edit.php' untuk melihat apakah ada tindakan / filter yang memungkinkan saya melakukannya, tetapi sepertinya tidak ada. Adakah yang bisa memberi tahu saya cara melakukan ini? Bantuan apa pun akan dihargai. Terima kasih

EDIT: Terima kasih @helenhousandi untuk jawabannya. Saya sudah melakukannya dengan cara ini.

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

Saya tahu ini sedikit lebih lama, tetapi berhasil! Saya pikir saya akan pergi dengan jawaban @ helenhousandi.

Rutwick Gangurde
sumber
Kemana ini harus pergi? functions.php?
Fabian
Iya. Itu bisa pergi ke functions.phpatau file plugin. Selama kaitnya benar, itu akan bekerja dari salah satu tempat.
Rutwick Gangurde
Oke, tetapi jika saya letakkan di functions.php, bagaimana cara mengembalikan javascript? dengan return atau echo?
Fabian
Tampaknya sejak WordPress v4.4.1, Nama Panggilan telah menjadi bidang wajib dan memberikan ERROR: Silakan Masukkan Nama Panggilan saat memperbarui pengguna dengan ini tersembunyi tetapi tidak diisi, sehingga Anda tidak bisa menyembunyikannya lagi
icc97

Jawaban:

15

Untuk filter metode kontak 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' );
Chris_O
sumber
Terima kasih ... dapatkan yang ini! Apa saja untuk bagian 'Tampilkan Bilah Admin' dan 'Tentang diri Anda'?
Rutwick Gangurde
Harap perbarui ini jika Anda menemukan solusinya ... Saya menerima jawaban Anda. Terima kasih!
Rutwick Gangurde
+1 karena sejauh yang saya ingat menghapus bidang melalui PHP juga menghentikan WordPress dari membuat entri kosong di tabel usermeta.
Ashfame
9

Meskipun user_contactmethodsfilter adalah salah satu dari sedikit untuk layar profil pengguna, karena bidang lain tidak diperlukan di WordPress, Anda dapat menggunakan jQuery's .hide()dan .remove()untuk secara efektif menyingkirkan yang tidak Anda inginkan tanpa komplikasi dalam hal menyimpan informasi . Tentu, seseorang tanpa JS masih akan melihat mereka, tetapi itu adalah minoritas kecil dan saya menduga bahwa perubahan informasi di sana tidak akan benar-benar mempengaruhi apa pun.

Contoh menghapus seluruh bagian opsi pribadi (tampilkan bilah admin dan skema warna). Saya tahu itu bukan yang Anda cari sebenarnya, hanya ingin memberi Anda contoh cepat yang saya miliki:

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

Juga, catatan tentang opsi Tampilkan Bilah Admin: di 3.3 bilah admin menjadi tajuk dan karenanya tidak dapat dinyalakan atau dimatikan, jadi mungkin tidak perlu dikhawatirkan.

Saya memperbarui contoh kode agar lebih akurat dan lengkap. Ada beberapa sisa makanan di sana.

helenhousandi
sumber
Terima kasih! Ini solusi yang bagus! Apa yang saya lakukan adalah sesuatu yang serupa tetapi saya menggunakan tindakan kait yang berbeda sehingga skrip saya hanya berjalan profile.php. Saya juga perlu melakukan ini untuk peran khusus yang ditentukan dalam sistem saya. Memperbarui pertanyaan saya dengan jawabannya.
Rutwick Gangurde
1
Jika Anda menambahkan yang berikut ke jQuery, ia juga akan menyembunyikan Nama Panggilan dan 'Nama Tampilan sebagai' dari pertanyaan:$("#nickname,#display_name").parent().parent().remove();
icc97
Anda juga dapat menggunakan kait edit_user_profil. Dan tidak menggunakan jQuery (dokumen). Sudah metode untuk menjalankan kode secara instan. Seperti ini
Giraldi
Nama panggilan diperlukan sekarang sejak WP v.4.4.1
icc97
2

Karena tampaknya tidak ada kait php yang baik untuk ini, saya akhirnya menyembunyikan bidang dengan CSS kemudian menghapusnya dengan 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
}
tobbe
sumber
1

Dari forum dukungan wordpress Anda dapat melakukan penghapusan menggunakan PHP. Ini menghapus bagian About Yourself:

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

Kode menggantikan tajuk 'Tentang Dirimu' dengan 'Kata Sandi' dan kemudian menghapus apa pun antara itu dan tabel berikutnya yang ditemukannya (yang merupakan tabel kata sandi).

Plugin WP Hide Dashboard melakukan penggantian jQuery yang serupa jika Anda ingin memperpanjangnya.

icc97
sumber
Untuk referensi di masa mendatang, Anda mungkin ingin menggunakan admin_head-profile.phpdan admin_footer-profile.phpsebagai gantinya
1

HATI-HATI!!

1) Menghapus bidang mungkin tidak baik , seperti pada pembaruan, jika Anda tidak akan mengirim bidang penting ke kait pembaruan WORDPRESS, maka mungkin menetapkan nilai kosong ke bidang tersebut! (misalnya, dalam mengirimkan formulir, harus ada yaitu <input name="username".../>)
Saya Pikir, bahwa lebih baik untuk HIDE dari pengguna hanya secara visual, dengan jquery .hide();dan tidak dengan .remove();
kode CONTOH untuk menyembunyikan bidang " DISPLAY NAME " dan " NICKNAME ":

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

2) Untuk menyembunyikan bilah admin, ada opsi khusus di menu wordpress (di Pengaturan) . untuk kode khusus, seperti mis

add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar()
{
  if (!current_user_can('administrator') && !is_admin()) 
  {
    show_admin_bar(false);
  }
}
T.Todua
sumber
0

Menggunakan

add_action('admin_head', 'remove_profile_fields');

dan tambahkan

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

sebelum JavaScript.

Akhil Sharma
sumber
Sedikit penjelasan akan sangat bagus!
bravokeyl
-4

Tidak ada filter untuk menonaktifkannya. Lihatlah sumber ( /wp-admin/user-edit.php) ketika Anda perlu melakukan hal-hal seperti ini. Anda bisa menyembunyikannya dengan JS tetapi masih bisa dibuat terlihat dan nilainya diperbarui pada POST.

Hanya opsi yang memungkinkan untuk meretas inti sendiri. Pastikan Anda menangani pembaruan dan abaikan bidang-bidang ini pada POST.

EarnestoDev
sumber
Ya, saya sudah memeriksa file itu! Solusi JS sepertinya tidak terlalu aman. Saya akan lihat apa yang dapat saya lakukan! Terima kasih!
Rutwick Gangurde
3
Jika satu-satunya solusi yang dapat Anda pikirkan adalah meretas inti, maka mungkin Anda sebaiknya tidak menjawab pertanyaan itu. Anda juga tidak perlu menyarankan kepada penanya pertanyaan untuk melihat file yang telah disebutkan, dan Anda juga tidak benar dalam menyatakan bahwa tidak ada filter sama sekali - tentunya Anda harus sudah membaca pertanyaan dan menjawab lebih dulu?
helenhousandi
@helenhousandi xoxo
EarnestoDev