Ajout de champs à l'écran «Ajouter un nouvel utilisateur» dans le tableau de bord

11

J'aimerais ajouter le champ "Nom de la société" à la page d'ajout d'un nouvel utilisateur dans le panneau d'administration. J'ai fait pas mal de recherches et je suis incapable de trouver des détails sur la façon de procéder. Je peux facilement ajouter des informations à la page de profil et s’inscrire auprès de ..

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

Mais pas de dés sur quoi que ce soit d'autre.

    
posée Zach Shallbetter 23.07.2011 - 00:22

9 réponses

-1

Pour ce faire, vous devrez modifier manuellement la page user-new.php. Ce n’est pas la bonne façon de le gérer, mais si vous avez désespérément besoin, voici comment cela se passe.

j'ai ajouté

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

J'ai également ajouté les informations au fichier functions.php

   function my_custom_userfields( $contactmethods ) {
    $contactmethods['company_name']             = 'Company Name';
    return $contactmethods;
   }
   add_filter('user_contactmethods','my_custom_userfields',10,1);
    
réponse donnée Zach Shallbetter 03.08.2011 - 20:01
16

user_new_form est le crochet qui peut faire la magie ici.

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

Pour plus de détails, consultez le message de mon blog: enlace

    
réponse donnée Tahir Yasin 12.11.2014 - 15:08
13

J'ai eu le même besoin et j'ai créé le hack suivant:

<?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');
    
réponse donnée NkR 09.01.2013 - 20:57
3

Vous devez faire 2 choses.

  1. Enregistrer les champs
  2. Enregistrer les champs

Remarque: L'exemple ci-dessous fonctionne uniquement pour le rôle d'utilisateur administrator .

1. Enregistrer les champs

Pour Ajouter un nouvel utilisateur , utilisez l'action user_new_form

.

Pour le profil utilisateur , utilisez les actions show_user_profile , edit_user_profile

.

Enregistrer les champs Extrait:

/**
 * 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. Enregistrer les champs

Pour Ajouter un nouvel utilisateur , utilisez l'action user_register

.

Pour le profil utilisateur , utilisez les actions personal_options_update , edit_user_profile_update

.

Enregistrer les champs Extrait:

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

Terminer l'extrait de code:

/**
 * 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'] );
    }
}
    
réponse donnée maheshwaghmare 22.08.2016 - 13:47
2

I La solution de contournement est disponible en utilisant le user_new_form_tag qui réside dans la balise de début de formulaire de la page user-new.php . En fin de compte, si vous exportez du HTML, il vous suffit de commencer la sortie avec > et de supprimer le dernier > généré de votre propre code. Comme dans:

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

Le user_new_form_tag est situé dans user-new.php autour de la ligne 303 (au moins dans le 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" />
...

Bien sûr, l’inconvénient est que tout votre champ personnalisé doit apparaître en premier dans le formulaire, avant les champs déclarés dans le noyau WP.

    
réponse donnée ojrask 19.06.2013 - 14:22
1

user_contactmethods le hook de filtre n'est pas appelé à la page user-new.php , donc cela ne fonctionnera pas et malheureusement si vous prenez un regardez à la source , vous verrez qu’il n’ya pas de hook qui puisse être utilisé pour ajouter des champs supplémentaires au formulaire d’ajout d’un nouvel utilisateur.

Cela ne peut donc être effectué qu'en modifiant les fichiers de base (BIG NO NO) ou en ajoutant les champs à l'aide de JavaScript ou de jQuery et en récupérant les champs.

ou vous pouvez créer un Ticket au Trac

    
réponse donnée Bainternet 23.07.2011 - 11:32
1

Le code suivant affichera "Informations biographiques" dans le formulaire "Ajouter un utilisateur"


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

    
réponse donnée Linish 06.02.2014 - 09:31
1

Les crochets sont importants, quelle que soit la manière dont nous avons trié les champs de formulaire dans la fonction. Suivez mes commentaires en ligne. À partir de WordPress 4.2.2, nous avons maintenant de nombreux crochets:

<?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
    
réponse donnée Mayeenul Islam 17.06.2015 - 14:02
0

Cela ne fonctionnera pas pour la page d'ajout d'un nouvel utilisateur, mais si vous souhaitez que cela se produise dans la page "Votre profil" (où les utilisateurs peuvent modifier leur profil), vous pouvez essayer ceci dans 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 }
    
réponse donnée AndrettiMilas 09.01.2013 - 22:50

Lire d'autres questions sur les étiquettes