Menambahkan bidang ke layar “Tambahkan Pengguna Baru” di dasbor


13

Saya ingin menambahkan bidang "Nama Perusahaan" ke halaman tambahkan pengguna baru di panel admin. Saya telah melakukan sedikit pencarian dan tidak dapat menemukan detail tentang cara melakukan ini. Saya dapat dengan mudah menambahkan info ke halaman profil dan mendaftar dengan ..

   function my_custom_userfields( $contactmethods ) {
    //Adds customer contact details
    $contactmethods['company_name'] = 'Company Name';
    return $contactmethods;
   }
   add_filter('user_contactmethods','my_custom_userfields',10,1);

Tetapi tidak ada dadu pada hal lain.


Anda dapat menggunakan plugin ACF (Advanced Customs Fields) untuk mengimplementasikan fitur ini.
Linish

Jawaban:


17

user_new_form adalah pengait yang bisa melakukan keajaiban di sini.

function custom_user_profile_fields($user){
  ?>
    <h3>Extra profile information</h3>
    <table class="form-table">
        <tr>
            <th><label for="company">Company Name</label></th>
            <td>
                <input type="text" class="regular-text" name="company" value="<?php echo esc_attr( get_the_author_meta( 'company', $user->ID ) ); ?>" id="company" /><br />
                <span class="description">Where are you?</span>
            </td>
        </tr>
    </table>
  <?php
}
add_action( 'show_user_profile', 'custom_user_profile_fields' );
add_action( 'edit_user_profile', 'custom_user_profile_fields' );
add_action( "user_new_form", "custom_user_profile_fields" );

function save_custom_user_profile_fields($user_id){
    # again do this only if you can
    if(!current_user_can('manage_options'))
        return false;

    # save my custom field
    update_usermeta($user_id, 'company', $_POST['company']);
}
add_action('user_register', 'save_custom_user_profile_fields');
add_action('profile_update', 'save_custom_user_profile_fields');

Untuk detail lebih lanjut kunjungi posting blog saya: http://scriptbaker.com/adding-custom-fields-to-wordpress-user-profile-and-add-new-user-page/


13

Saya memiliki kebutuhan yang sama dan membuat retasan berikut:

<?php
function hack_add_custom_user_profile_fields(){
    global $pagenow;

    # do this only in page user-new.php
    if($pagenow !== 'user-new.php')
        return;

    # do this only if you can
    if(!current_user_can('manage_options'))
        return false;

?>
<table id="table_my_custom_field" style="display:none;">
<!-- My Custom Code { -->
    <tr>
        <th><label for="my_custom_field">My Custom Field</label></th>
        <td><input type="text" name="my_custom_field" id="my_custom_field" /></td>
    </tr>
<!-- } -->
</table>
<script>
jQuery(function($){
    //Move my HTML code below user's role
    $('#table_my_custom_field tr').insertAfter($('#role').parentsUntil('tr').parent());
});
</script>
<?php
}
add_action('admin_footer_text', 'hack_add_custom_user_profile_fields');


function save_custom_user_profile_fields($user_id){
    # again do this only if you can
    if(!current_user_can('manage_options'))
        return false;

    # save my custom field
    update_usermeta($user_id, 'my_custom_field', $_POST['my_custom_field']);
}
add_action('user_register', 'save_custom_user_profile_fields');

3
Sekarang kami sedang menunggu penjelasan Anda.
fuxia

Saya melihat kode sumber di file user-new.php e tidak memiliki hook tindakan seperti "add_user_profile" jadi saya mensimulasikan ini dengan action "admin_footer_text" dan memfilter dengan $ pagenow == "user-new.php". Sekarang saya berkomentar hack untuk menjelaskan kode.
NkR

3
Mengapa Anda tidak menggunakan user_new_formtindakan?
itsazzad

@SazzadTusharKhan tx untuk penunjuk
alex

3

Anda perlu melakukan 2 hal.

  1. Daftarkan bidang
  2. Simpan bidang

Catatan: Contoh di bawah ini hanya berfungsi untuk administratorperan pengguna.


1. Daftarkan bidang

Untuk tindakan Tambahkan Pengguna Baru gunakanuser_new_form

Untuk tindakan penggunaan Profil Pengguna show_user_profile,edit_user_profile

Daftarkan bidang Cuplikan:

/**
 * Add fields to user profile screen, add new user screen
 */
if( !function_exists('m_register_profile_fields') ) {

    //  This action for 'Add New User' screen
    add_action( 'user_new_form', 'm_register_profile_fields' );

    //  This actions for 'User Profile' screen
    add_action( 'show_user_profile', 'm_register_profile_fields' );
    add_action( 'edit_user_profile', 'm_register_profile_fields' );

    function m_register_profile_fields( $user ) {

        if ( !current_user_can( 'administrator', $user_id ) )
            return false;

        ?>

        <h3>Client Portal</h3>
        <table class="form-table">
            <tr>
                <th><label for="dropdown">Portal Category</label></th>
                <td>
                    <input type="text" class="regular-text" name="portal_cat" value="<?php echo esc_attr( get_the_author_meta( 'portal_cat', $user->ID ) ); ?>" id="portal_cat" /><br />
                </td>
            </tr>
        </table>
    <?php }
}

2. Simpan bidang

Untuk tindakan Tambahkan Pengguna Baru gunakanuser_register

Untuk tindakan penggunaan Profil Pengguna personal_options_update,edit_user_profile_update

Simpan cuplikan bidang:

/**
 *  Save portal category field to user profile page, add new profile page etc
 */
if( !function_exists('m_register_profile_fields') ) {

    //  This action for 'Add New User' screen
    add_action( 'user_register', 'cp_save_profile_fields' );

    //  This actions for 'User Profile' screen
    add_action( 'personal_options_update', 'cp_save_profile_fields' );
    add_action( 'edit_user_profile_update', 'cp_save_profile_fields' );

    function cp_save_profile_fields( $user_id ) {

        if ( !current_user_can( 'administrator', $user_id ) )
            return false;

        update_usermeta( $user_id, 'portal_cat', $_POST['portal_cat'] );
    }
}

Cuplikan Kode Lengkap:

/**
 * Add fields to user profile screen, add new user screen
 */
if( !function_exists('m_register_profile_fields') ) {

    //  This action for 'Add New User' screen
    add_action( 'user_new_form', 'm_register_profile_fields' );

    //  This actions for 'User Profile' screen
    add_action( 'show_user_profile', 'm_register_profile_fields' );
    add_action( 'edit_user_profile', 'm_register_profile_fields' );

    function m_register_profile_fields( $user ) {

        if ( !current_user_can( 'administrator', $user_id ) )
            return false;

        ?>

        <h3>Client Portal</h3>
        <table class="form-table">
            <tr>
                <th><label for="dropdown">Portal Category</label></th>
                <td>
                    <input type="text" class="regular-text" name="portal_cat" value="<?php echo esc_attr( get_the_author_meta( 'portal_cat', $user->ID ) ); ?>" id="portal_cat" /><br />
                </td>
            </tr>
        </table>
    <?php }
}


/**
 *  Save portal category field to user profile page, add new profile page etc
 */
if( !function_exists('m_register_profile_fields') ) {

    //  This action for 'Add New User' screen
    add_action( 'user_register', 'cp_save_profile_fields' );

    //  This actions for 'User Profile' screen
    add_action( 'personal_options_update', 'cp_save_profile_fields' );
    add_action( 'edit_user_profile_update', 'cp_save_profile_fields' );

    function cp_save_profile_fields( $user_id ) {

        if ( !current_user_can( 'administrator', $user_id ) )
            return false;

        update_usermeta( $user_id, 'portal_cat', $_POST['portal_cat'] );
    }
}

2

Solusi saya tersedia dengan menggunakan user_new_form_tagyang berada di dalam user-new.phptag awal formulir halaman. Ini pada akhirnya jadi jika Anda menghasilkan HTML setelah itu Anda hanya perlu memulai dengan >dan menghapus yang terakhir dikeluarkan >dari kode Anda sendiri. Seperti dalam:

function add_new_field_to_useradd()
{
    echo "><div>"; // Note the first '>' here. We wrap our own output to a 'div' element.

    // Your wanted output code should be here here.

    echo "</div"; // Note the missing '>' here.
}

add_action( "user_new_form_tag", "add_new_field_to_useradd" );

Itu user_new_form_tagterletak di user-new.phpsekitar baris 303 (setidaknya dalam WP3.5.1):

...
<p><?php _e('Create a brand new user and add it to this site.'); ?></p>
<form action="" method="post" name="createuser" id="createuser" class="validate"<?php do_action('user_new_form_tag');?>>
<input name="action" type="hidden" value="createuser" />
...

Tentu saja downside di sini adalah bahwa semua bidang kustom Anda harus muncul terlebih dahulu di formulir, sebelum bidang dinyatakan dalam WP core.


2

Kait itu penting, tidak masalah bagaimana kami mengurutkan bidang formulir di dalam fungsi. Ikuti komentar sebaris saya. Pada WordPress 4.2.2 kami memiliki banyak kait sekarang:

<?php
/**
 * Declaring the form fields
 */
function show_my_fields( $user ) {
   $fetched_field = get_user_meta( $user->ID, 'my_field', true ); ?>
    <tr class="form-field">
       <th scope="row"><label for="my-field"><?php _e('Field Name') ?> </label></th>
       <td><input name="my_field" type="text" id="my-field" value="<?php echo esc_attr($fetched_field); ?>" /></td>
    </tr>
<?php
}
add_action( 'show_user_profile', 'show_my_fields' ); //show in my profile.php page
add_action( 'edit_user_profile', 'show_my_fields' ); //show in my profile.php page

//add_action( 'user_new_form_tag', 'show_my_fields' ); //to add the fields before the user-new.php form
add_action( 'user_new_form', 'show_my_fields' ); //to add the fields after the user-new.php form

/**
 * Saving my form fields
 */
function save_my_form_fields( $user_id ) {
    update_user_meta( $user_id, 'my_field', $_POST['my_field'] );
}
add_action( 'personal_options_update', 'save_my_form_fields' ); //for profile page update
add_action( 'edit_user_profile_update', 'save_my_form_fields' ); //for profile page update

add_action( 'user_register', 'save_my_form_fields' ); //for user-new.php page new user addition

1

user_contactmethodsfilter hook tidak dipanggil pada user-new.phphalaman sehingga tidak akan berfungsi dan sedih jika Anda melihat sumbernya Anda akan melihat bahwa tidak ada hook yang dapat digunakan untuk menambahkan bidang tambahan ke form tambah pengguna baru.

Jadi ini hanya dapat dilakukan dengan memodifikasi file inti (BIG NO NO) atau menambahkan bidang menggunakan JavaScript atau jQuery dan menangkap bidang.

atau Anda dapat membuat Tiket di Trac


Sayangnya, untuk membuatnya berfungsi, untuk sementara, saya terpaksa memodifikasi user-new.php. Ini tidak, tidak. Tapi semoga itu sementara.
Zach Shallbetter

1

Kode berikut akan menampilkan "Info Biografis" di formulir "Tambahkan Pengguna"


function display_bio_field() {
  echo "The field html";
}
add_action('user_new_form', 'display_bio_field');


Jawaban hanya kode adalah jawaban yang buruk. Coba tautkan artikel Codex terkait dan jelaskan kodenya di sini.
Mayeenul Islam

0

Untuk melakukan ini, Anda harus mengubah halaman pengguna-new.php secara manual. Ini bukan cara yang tepat untuk menanganinya tetapi jika Anda sangat membutuhkan ini caranya.

saya tambahkan

<tr class="form-field">
    <th scope="row"><label for="company_name"><?php _e('Company Name') ?> </label></th>
    <td><input name="company_name" type="text" id="company_name" value="<?php echo esc_attr($new_user_companyname); ?>" /></td>
</tr>

Saya juga menambahkan informasi ke functions.php

   function my_custom_userfields( $contactmethods ) {
    $contactmethods['company_name']             = 'Company Name';
    return $contactmethods;
   }
   add_filter('user_contactmethods','my_custom_userfields',10,1);

0

Ini tidak akan melakukannya untuk menambah halaman pengguna baru, tetapi jika Anda ingin membuatnya terjadi di halaman "Profil Anda" (di mana pengguna dapat mengedit profil mereka), maka Anda dapat mencoba ini di functions.php:

add_action( 'show_user_profile', 'my_show_extra_profile_fields' );
add_action( 'edit_user_profile', 'my_show_extra_profile_fields' );
function my_show_extra_profile_fields( $user ) { ?>
    <h3>Extra profile information</h3>
    <table class="form-table">
        <tr>
            <th><label for="companyname">Company Name</label></th>
            <td>
                <input type="text" name="companyname" id="companyname" value="<?php echo esc_attr( get_the_author_meta( 'companyname', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description">Where are you?</span>
            </td>
        </tr>
    </table>
<?php }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.