it-swarm.com.de

Hinzufügen von Feldern zum Bildschirm "Neuen Benutzer hinzufügen" im Dashboard

Ich möchte das Feld "Firmenname" zur Seite "Neuen Benutzer hinzufügen" im Admin-Bereich hinzufügen. Ich habe ziemlich viel gesucht und konnte keine Details dazu finden. Ich kann einfach Informationen zur Profilseite hinzufügen und mich bei ... registrieren.

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

Aber keine Würfel auf irgendetwas anderem.

11

user_new_form ist der Haken, der hier die Magie machen kann.

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

Weitere Informationen finden Sie in meinem Blogbeitrag: http://scriptbaker.com/adding-custom-fields-to-wordpress-user-profile-and-add-new-user-page/

16
Tahir Yasin

Ich hatte das gleiche Bedürfnis und erstellte den folgenden Hack:

<?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');
13
NkR

Sie müssen 2 Dinge tun.

  1. Felder registrieren
  2. Felder speichern

Hinweis: Das folgende Beispiel funktioniert nur für die Benutzerrolle administrator.


1. Felder registrieren

Für Neuen Benutzer hinzufügen Aktion verwenden user_new_form

Für Benutzerprofil Aktionen verwenden show_user_profile, edit_user_profile

Felder registrieren 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. Felder speichern

Für Neuen Benutzer hinzufügen Aktion verwenden user_register

Für Benutzerprofil Aktionen verwenden personal_options_update, edit_user_profile_update

Felder speichern Snippet:

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

Vollständiges Code-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 }
}


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

Ich kann das Problem umgehen, indem ich den user_new_form_tag verwende, der sich im Starttag der user-new.php-Seite befindet. Wenn Sie anschließend HTML ausgeben, müssen Sie die Ausgabe nur mit > beginnen und den zuletzt ausgegebenen > Ihres eigenen Codes entfernen. Wie in:

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

Der user_new_form_tag befindet sich in user-new.php um die Zeile 303 (mindestens in 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" />
...

Der Nachteil hierbei ist natürlich, dass alle benutzerdefinierten Felder zuerst im Formular angezeigt werden müssen, bevor die Felder in WP core deklariert werden.

2
ojrask

Die Haken sind wichtig, egal wie wir Formularfelder innerhalb der Funktion sortieren. Folgen Sie meinen Inline-Kommentaren. Ab WordPress 4.2.2 haben wir jetzt viele Hooks:

<?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
Mayeenul Islam

user_contactmethods filter hook wird auf der user-new.php-Seite nicht aufgerufen, sodass dies nicht funktioniert. Wenn Sie einen Blick auf die Quelle werfen, werden Sie feststellen, dass es keinen Hook gibt, mit dem zusätzliche Felder zum Hinzufügen hinzugefügt werden können neues Benutzerformular.

Dies kann also nur durch Ändern der Kerndateien (BIG NO NO) oder Hinzufügen der Felder mit JavaScript oder jQuery und Abfangen der Felder erfolgen.

oder du kannst ein Ticket im Trac erstellen

1
Bainternet

Der folgende Code zeigt "Biografische Informationen" im Formular "Benutzer hinzufügen" an


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

Dies funktioniert nicht für die Seite zum Hinzufügen neuer Benutzer. Wenn Sie dies jedoch auf der Seite "Ihr Profil" tun möchten (auf der Benutzer ihr Profil bearbeiten können), können Sie dies in functions.php versuchen:

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 }
0
AndrettiMilas