대시 보드의 "새 사용자 추가"화면에 필드 추가


13

"회사 이름"필드를 관리자 패널의 새 사용자 추가 페이지에 추가하고 싶습니다. 나는 약간의 검색을 해왔고 이것을 수행하는 방법에 대한 세부 사항을 찾을 수 없었습니다. 프로필 페이지에 정보를 쉽게 추가하고 등록 할 수 있습니다.

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

그러나 다른 것은 없습니다.


당신이 사용할 수있는 플러그인 ACF (고급 사용자 정의 필드) 이 기능을 구현합니다.
Licens

답변:


17

user_new_form 여기서 마술을 할 수있는 고리입니다.

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

자세한 내용은 내 블로그 게시물을 방문하십시오 : http://scriptbaker.com/adding-custom-fields-to-wordpress-user-profile-and-add-new-user-page/


13

나는 같은 요구가 있었고 다음과 같은 핵을 만들었습니다.

<?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
이제 우리는 당신의 설명을 기다리고 있습니다.
fuxia

user-new.php 파일의 소스 코드를 보았습니다. "add_user_profile"과 같은 동작 후크가 없으므로 "admin_footer_text"동작으로이를 시뮬레이션하고 $ pagenow == "user-new.php"로 필터링하십시오. 이제 코드를 설명하기 위해 해킹에 댓글을 달았습니다.
NkR

3
user_new_form행동 을하지 않습니까?
itsazzad

포인터에 대한 @SazzadTusharKhan tx
alex

3

두 가지를해야합니다.

  1. 필드 등록
  2. 필드 저장

참고 : 아래 예는 administrator사용자 역할에 대해서만 작동합니다 .


1. 등록 필드

대한 추가 새 사용자의 사용 행동user_new_form

에 대한 사용자 프로필 사용 작업 show_user_profile,edit_user_profile

필드 스 니펫 등록 :

/**
 * 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. 필드 저장

대한 추가 새 사용자의 사용 행동user_register

에 대한 사용자 프로필 사용 작업 personal_options_update,edit_user_profile_update

필드 저장 스 니펫 :

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

완전한 코드 스 니펫 :

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

해결 방법은 페이지의 양식 시작 태그 user_new_form_tag안에있는를 사용하여 사용할 수 있습니다 user-new.php. 결국 HTML을 출력하면 출력을 시작 >하고 마지막으로 출력 >한 코드를 제거하면 됩니다. 에서처럼 :

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_tag에 위치하고 있습니다 user-new.php(적어도 WP3.5.1에서) 주위 라인 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" />
...

물론 여기서 단점은 모든 사용자 정의 필드가 WP 코어에서 선언 된 필드보다 먼저 양식에서 나타나야한다는 것입니다.


2

함수 내에서 양식 필드를 어떻게 정렬했는지에 관계없이 후크는 중요합니다. 내 인라인 주석을 따르십시오. WordPress 4.2.2부터는 많은 후크가 있습니다.

<?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_contactmethods필터 후크는 user-new.php페이지 에서 호출되지 않으므로 작동하지 않으며 슬프게도 소스보면 새 사용자 추가 양식에 추가 필드를 추가하는 데 사용할 수있는 후크가 없음을 알 수 있습니다.

따라서 핵심 파일을 수정하거나 (BIG NO NO) JavaScript 또는 jQuery를 사용하여 필드를 추가하고 필드를 잡아야 만 가능합니다.

또는 Trac에서 티켓을 만들 수 있습니다


불행히도 일시적으로 작동하려면 user-new.php를 수정해야했습니다. 이것은 아니오 아니오입니다. 그러나 희망적으로 그것은 일시적입니다.
Zach Shallbetter

1

다음 코드는 "사용자 추가"양식에 "전기 정보"를 표시합니다.


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


코드 전용 답변은 잘못된 답변입니다. 관련 Codex 기사를 연결하고 여기에 코드를 설명하십시오.
Mayeenul Islam

0

이렇게하려면 user-new.php 페이지를 수동으로 변경해야합니다. 그것을 처리하는 올바른 방법은 아니지만 필사적으로 필요한 경우 이것이 수행되는 방법입니다.

나는 덧붙였다

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

또한 functions.php에 정보를 추가했습니다.

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

0

새 사용자 추가 페이지에는 적용되지 않지만 "프로필"페이지 (사용자가 자신의 프로필을 편집 할 수있는 페이지)에서 페이지를 만들려면 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 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.