Thêm các trường vào màn hình Thêm người dùng mới trong bảng điều khiển


13

Tôi muốn thêm trường "Tên công ty" vào trang người dùng mới trong bảng quản trị. Tôi đã thực hiện khá nhiều tìm kiếm và không thể tìm thấy chi tiết về cách thực hiện việc này. Tôi có thể dễ dàng thêm thông tin vào trang hồ sơ và đăng ký với ..

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

Nhưng không có xúc xắc trên bất cứ điều gì khác.


Bạn có thể sử dụng plugin ACF (Trường tùy chỉnh nâng cao) để triển khai tính năng này.
Linish

Câu trả lời:


17

user_new_form là cái móc có thể làm phép thuật ở đây.

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

Để biết thêm chi tiết, hãy truy cập bài đăng trên blog của tôi: http://scriptbaker.com/adding-custom-fields-to-wordpress-user-profile-and-add-new-user-page/


13

Tôi có cùng nhu cầu và tạo ra bản hack sau:

<?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
Bây giờ chúng tôi đang chờ lời giải thích của bạn.
fuxia

Tôi thấy mã nguồn trong tệp user-new.php e không có hook hành động như "add_user_profile" vì vậy tôi mô phỏng mã này bằng hành động "admin_footer lòng" và lọc theo $ pagenow == "user-new.php". Bây giờ tôi nhận xét hack để giải thích mã.
NkR

3
Tại sao bạn không sử dụng user_new_formhành động?
itazzad

@SazzadTusharKhan tx cho con trỏ
alex

3

Bạn cần làm 2 việc.

  1. Đăng ký các lĩnh vực
  2. Lưu các lĩnh vực

Lưu ý: Ví dụ dưới đây chỉ hoạt động cho administratorvai trò người dùng.


1. Đăng ký các lĩnh vực

Đối với hành động sử dụng thêm người dùng mớiuser_new_form

Đối với hành động sử dụng Hồ sơ người dùng show_user_profile,edit_user_profile

Đăng ký các trường Đoạn:

/**
 * 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. Lưu các trường

Đối với hành động sử dụng thêm người dùng mớiuser_register

Đối với hành động sử dụng Hồ sơ người dùng personal_options_update,edit_user_profile_update

Lưu các trường đoạn:

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

Đoạn mã hoàn chỉnh:

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

Tôi giải quyết có sẵn bằng cách sử dụng user_new_form_tagcái nằm trong user-new.phpthẻ bắt đầu của trang. Cuối cùng, nếu bạn xuất HTML sau đó, bạn chỉ cần bắt đầu đầu ra >và loại bỏ mã xuất ra cuối cùng >của mã của riêng bạn. Như trong:

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_tagnằm ở user-new.phpkhoảng dòng 303 (ít nhất là trong 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" />
...

Tất nhiên nhược điểm ở đây là tất cả các trường tùy chỉnh của bạn phải xuất hiện đầu tiên trong biểu mẫu, trước khi các trường được khai báo trong lõi WP.


2

Các hook rất quan trọng, bất kể chúng ta đã sắp xếp các trường mẫu bên trong hàm như thế nào. Thực hiện theo ý kiến ​​nội tuyến của tôi. Kể từ WordPress 4.2.2, chúng ta có rất nhiều hook bây giờ:

<?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_contactmethodshook bộ lọc không được gọi tại user-new.phptrang để không hoạt động và thật đáng buồn nếu bạn xem nguồn bạn sẽ thấy rằng không có hook nào có thể được sử dụng để thêm các trường bổ sung vào biểu mẫu người dùng mới.

Vì vậy, điều này chỉ có thể được thực hiện bằng cách sửa đổi các tệp lõi (BIG NO NO) hoặc thêm các trường bằng JavaScript hoặc jQuery và bắt các trường.

hoặc bạn có thể tạo một vé tại Trac


Thật không may, để tạm thời làm cho nó hoạt động, tôi buộc phải sửa đổi user-new.php. Đây là một không không. Nhưng hy vọng nó là tạm thời.
Zach Shallbetter

1

Đoạn mã sau sẽ hiển thị "Thông tin tiểu sử" ở dạng "Thêm người dùng"


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


Một câu trả lời chỉ có mã là một câu trả lời xấu. Hãy thử liên kết bài viết Codex liên quan và giải thích mã ở đây.
Hồi giáo Mayeenul

0

Để làm điều này, bạn sẽ phải thay đổi trang user-new.php theo cách thủ công. Đây không phải là cách chính xác để xử lý nhưng nếu bạn đang tuyệt vọng thì đây là cách thực hiện.

Tôi đã thêm

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

Tôi cũng đã thêm thông tin vào hàm.php

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

0

Điều này sẽ không làm điều đó cho thêm trang người dùng mới, nhưng nếu bạn muốn làm cho nó xảy ra trong trang "Hồ sơ của bạn" (nơi người dùng có thể chỉnh sửa hồ sơ của họ), thì bạn có thể thử điều này trong hàm.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 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.