Gösterge tablosundaki "Yeni Kullanıcı Ekle" ekranına alan ekleme


13

Yönetici panelinde yeni kullanıcı ekle sayfasına "Şirket Adı" alanını eklemek istiyorum. Biraz arama yaptım ve bunun nasıl yapılacağıyla ilgili ayrıntıları bulamadım. Profil sayfasına kolayca bilgi ekleyebilir ve kayıt olabilirim.

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

Ama başka bir şey üzerinde zar yok.


Bu özelliği uygulamak için ACF (Gelişmiş Özel Alanlar) eklentisini kullanabilirsiniz.
Linish

Yanıtlar:


17

user_new_form Burada sihri yapabilen kanca.

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

Daha fazla bilgi için blog gönderimi ziyaret edin: http://scriptbaker.com/adding-custom-fields-to-wordpress-user-profile-and-add-new-user-page/


13

Aynı ihtiyacı vardı ve aşağıdaki kesmek yarattı:

<?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
Şimdi açıklamanızı bekliyoruz.
fuxia

Ben kaynak kodu kullanıcı-new.php e gördüm "add_user_profile" gibi bir eylem kanca yok bu yüzden bunu "admin_footer_text" eylem ile simüle ve $ pagenow == "user-new.php" filtre. Şimdi kodu açıklamak için kesmek yorumladı.
NkR

3
Neden user_new_formeylem kullanmıyorsunuz ?
itsazzad

@SazzadTusharKhan işaretçi için tx
alex

3

2 şey yapmanız gerekiyor.

  1. Kayıt alanları
  2. Alanları kaydet

Not: Aşağıdaki örnek yalnızca administratorkullanıcı rolü için geçerlidir.


1. Kayıt alanları

İçin Ekleme Yeni Kullanıcı kullanımı eylemuser_new_form

İçin Kullanıcı Profili kullanım eylemleri show_user_profile,edit_user_profile

Kayıt alanları Snippet:

/**
 * 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. Alanları kaydedin

İçin Ekleme Yeni Kullanıcı kullanımı eylemuser_register

İçin Kullanıcı Profili kullanım eylemleri personal_options_update,edit_user_profile_update

Alanlar snippet'ini kaydet:

/**
 *  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'] );
    }
}

Tam Kod Parçacığı:

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

Geçici çözüm, sayfanın form başlangıç ​​etiketi user_new_form_tagiçinde bulunan kullanılarak kullanılabilir user-new.php. Sonuçta HTML çıktısı alırsanız, çıktıyı kendi kodunuzla >son başlatmanız ve >kendi kodunuzun son çıktısını kaldırmanız yeterlidir . De olduğu gibi:

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

user_new_form_tagYer almaktadır user-new.php(en azından WP3.5.1 olarak) yaklaşık hattı 303:

...
<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" />
...

Tabii ki buradaki dezavantaj, tüm özel alanınızın WP çekirdeğinde bildirilen alanlardan önce formda görünmesi gerektiğidir.


2

İşlevin içindeki form alanlarını nasıl sıraladığımız önemli değil, kancalar önemlidir. Satır içi yorumlarımı takip et. WordPress 4.2.2'den itibaren şu anda birçok kanca var:

<?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_contactmethodsFiltre kancası user-new.phpsayfada çalışmaz, böylece çalışmaz ve ne yazık ki kaynağa bir göz atarsanız, yeni kullanıcı formu eklemek için ek alanlar eklemek için kullanılabilecek bir kanca olmadığını göreceksiniz.

Bu sadece çekirdek dosyaları değiştirerek (BIG NO NO) veya JavaScript veya jQuery kullanarak alanları ekleyerek ve alanları yakalayarak yapılabilir.

veya Trac'ta Bilet oluşturabilirsiniz


Ne yazık ki, geçici olarak çalışmasını sağlamak için user-new.php dosyasını değiştirmek zorunda kaldım. Bu bir hayır hayır. Ama umarım geçicidir.
Zach Shallbetter

1

Aşağıdaki kod, "Kullanıcı Ekle" formunda "Biyografik Bilgi" görüntüler


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


Yalnızca kod yanıtı kötü bir yanıttır. İlgili Codex makalesini bağlantılandırmayı ve kodu burada açıklamayı deneyin.
Mayeenul Islam

0

Bunu yapmak için user-new.php sayfasını manuel olarak değiştirmeniz gerekir. Bununla başa çıkmak için doğru yol değil, ama eğer umutsuz bir ihtiyaç duyuyorsanız, bu böyle yapılır.

ekledim

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

Bilgileri de function.php dosyasına ekledim

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

0

Bu, yeni kullanıcı ekleme sayfası için bunu yapmaz, ancak "Profiliniz" sayfasında (kullanıcıların profillerini düzenleyebilecekleri yerde) olmasını istiyorsanız, bunu function.php dosyasında deneyebilirsiniz.

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 }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.