Adăugarea câmpurilor în ecranul "Adaugă Utilizator Nou" din panoul de administrare

23 iul. 2011, 01:22:26
Vizualizări: 36.8K
Voturi: 16

Aș dori să adaug câmpul "Nume Companie" în pagina de adăugare utilizator nou din panoul de administrare. Am făcut destul de multe căutări și nu am reușit să găsesc detalii despre cum să fac acest lucru. Pot adăuga cu ușurință informații în pagina de profil și la înregistrare cu...

   function my_custom_userfields( $contactmethods ) {
    //Adaugă detalii de contact pentru client
    $contactmethods['company_name'] = 'Nume Companie';
    return $contactmethods;
   }
   add_filter('user_contactmethods','my_custom_userfields',10,1);

Dar nu funcționează pentru nimic altceva.

1
Comentarii

Puteți folosi pluginul ACF (Advanced Custom Fields) pentru a implementa această funcționalitate.

Linish Linish
11 sept. 2017 19:56:50
Toate răspunsurile la întrebare 10
0
26

user_new_form este hook-ul care poate face magia aici.

function custom_user_profile_fields($user){
  ?>
    <h3>Informații suplimentare de profil</h3>
    <table class="form-table">
        <tr>
            <th><label for="company">Nume companie</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">Unde te afli?</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){
    # facem acest lucru doar dacă avem permisiunea
    if(!current_user_can('manage_options'))
        return false;

    # salvăm câmpul personalizat
    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');

Pentru mai multe detalii vizitează postul meu de blog: http://scriptbaker.com/adding-custom-fields-to-wordpress-user-profile-and-add-new-user-page/

12 nov. 2014 16:08:06
4
13

Am avut aceeași nevoie și am creat următorul hack:

<?php
function hack_add_custom_user_profile_fields(){
    global $pagenow;

    # se execută doar în pagina user-new.php
    if($pagenow !== 'user-new.php')
        return;

    # se execută doar dacă ai permisiunea
    if(!current_user_can('manage_options'))
        return false;

?>
<table id="table_my_custom_field" style="display:none;">
<!-- Codul meu Personalizat { -->
    <tr>
        <th><label for="my_custom_field">Câmpul meu Personalizat</label></th>
        <td><input type="text" name="my_custom_field" id="my_custom_field" /></td>
    </tr>
<!-- } -->
</table>
<script>
jQuery(function($){
    //Mut codul HTML sub rolul utilizatorului
    $('#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){
    # se execută doar dacă ai permisiunea
    if(!current_user_can('manage_options'))
        return false;

    # salvează câmpul meu personalizat
    update_usermeta($user_id, 'my_custom_field', $_POST['my_custom_field']);
}
add_action('user_register', 'save_custom_user_profile_fields');
9 ian. 2013 21:57:05
Comentarii

Acum așteptăm explicația ta.

fuxia fuxia
9 ian. 2013 23:19:02

Am văzut codul sursă în fișierul user-new.php și nu am un action hook precum "add_user_profile", așa că am simulat acest lucru cu acțiunea "admin_footer_text" și am filtrat prin $pagenow == "user-new.php".

Acum am comentat soluția temporară pentru a explica codul.

NkR NkR
10 ian. 2013 13:41:23

De ce nu folosești acțiunea user_new_form?

itsazzad itsazzad
7 mai 2014 03:11:50

@SazzadTusharKhan mulțumesc pentru indicație

alex alex
23 sept. 2014 23:02:16
2

Trebuie să faci 2 lucruri.

  1. Înregistrează câmpuri
  2. Salvează câmpuri

Notă: Exemplul de mai jos funcționează doar pentru rolul de utilizator administrator.


1. Înregistrează câmpuri

Pentru Adăugare Utilizator Nou folosește acțiunea user_new_form

Pentru Profil Utilizator folosește acțiunile show_user_profile, edit_user_profile

Fragment de cod pentru înregistrarea câmpurilor:

/**
 * Adaugă câmpuri în ecranul de profil utilizator, ecranul de adăugare utilizator nou
 */
if( !function_exists('m_register_profile_fields') ) {

    //  Această acțiune pentru ecranul 'Adăugare Utilizator Nou'
    add_action( 'user_new_form', 'm_register_profile_fields' );

    //  Aceste acțiuni pentru ecranul 'Profil Utilizator'
    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>Portal Client</h3>
        <table class="form-table">
            <tr>
                <th><label for="dropdown">Categorie Portal</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. Salvează câmpuri

Pentru Adăugare Utilizator Nou folosește acțiunea user_register

Pentru Profil Utilizator folosește acțiunile personal_options_update, edit_user_profile_update

Fragment de cod pentru salvarea câmpurilor:

/**
 *  Salvează câmpul categorie portal în pagina de profil utilizator, pagina de adăugare profil etc
 */
if( !function_exists('m_register_profile_fields') ) {

    //  Această acțiune pentru ecranul 'Adăugare Utilizator Nou'
    add_action( 'user_register', 'cp_save_profile_fields' );

    //  Aceste acțiuni pentru ecranul 'Profil Utilizator'
    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'] );
    }
}

Fragment de cod complet:

/**
 * Adaugă câmpuri în ecranul de profil utilizator, ecranul de adăugare utilizator nou
 */
if( !function_exists('m_register_profile_fields') ) {

    //  Această acțiune pentru ecranul 'Adăugare Utilizator Nou'
    add_action( 'user_new_form', 'm_register_profile_fields' );

    //  Aceste acțiuni pentru ecranul 'Profil Utilizator'
    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>Portal Client</h3>
        <table class="form-table">
            <tr>
                <th><label for="dropdown">Categorie Portal</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 }
}


/**
 *  Salvează câmpul categorie portal în pagina de profil utilizator, pagina de adăugare profil etc
 */
if( !function_exists('m_register_profile_fields') ) {

    //  Această acțiune pentru ecranul 'Adăugare Utilizator Nou'
    add_action( 'user_register', 'cp_save_profile_fields' );

    //  Aceste acțiuni pentru ecranul 'Profil Utilizator'
    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'] );
    }
}
22 aug. 2016 14:47:14
Comentarii

Salut, Acest lucru nu se salvează în user_meta

sanjeev shetty sanjeev shetty
5 iun. 2020 04:01:08

În loc de if ( !current_user_can( 'administrator', $user_id ) ) folosește if ( !current_user_can( 'administrator' ) ). Parametrii funcției current_user_can() au fost actualizați - https://developer.wordpress.org/reference/functions/current_user_can/

maheshwaghmare maheshwaghmare
5 iun. 2020 09:57:12
0

Hook-urile sunt importante, indiferent cum am sortat câmpurile formularului în interiorul funcției. Urmați comentariile mele inline. Începând cu WordPress 4.2.2 avem acum o mulțime de hook-uri:

<?php
/**
 * Declararea câmpurilor formularului
 */
function wpse23813_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('Nume Câmp') ?> </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', 'wpse23813_show_my_fields' ); //afișează în pagina mea profile.php
add_action( 'edit_user_profile', 'wpse23813_show_my_fields' ); //afișează în pagina mea profile.php

//add_action( 'user_new_form_tag', 'wpse23813_show_my_fields' ); //pentru a adăuga câmpurile înainte de formularul user-new.php
add_action( 'user_new_form', 'wpse23813_show_my_fields' ); //pentru a adăuga câmpurile după formularul user-new.php

/**
 * Salvarea câmpurilor mele de formular
 */
function wpse23813_save_my_form_fields( $user_id ) {
    update_user_meta( $user_id, 'my_field', $_POST['my_field'] );
}
add_action( 'personal_options_update', 'wpse23813_save_my_form_fields' ); //pentru actualizarea paginii de profil
add_action( 'edit_user_profile_update', 'wpse23813_save_my_form_fields' ); //pentru actualizarea paginii de profil

add_action( 'user_register', 'wpse23813_save_my_form_fields' ); //pentru adăugarea unui nou utilizator în pagina user-new.php
17 iun. 2015 15:02:18
1

Filtrul user_contactmethods nu este apelat pe pagina user-new.php, așa că nu va funcționa și, din păcate, dacă te uiți la sursă, vei vedea că nu există niciun hook care să poată fi utilizat pentru a adăuga câmpuri suplimentare în formularul de adăugare utilizator nou.

Prin urmare, acest lucru poate fi realizat doar prin modificarea fișierelor de bază (NU RECOMANDAT) sau prin adăugarea câmpurilor folosind JavaScript sau jQuery și capturarea acestor câmpuri.

Sau poți crea un Ticket în Trac

23 iul. 2011 12:32:31
Comentarii

Din păcate, pentru a-l face să funcționeze temporar, am fost nevoit să modific user-new.php. Acest lucru nu este recomandat. Dar sper că va fi doar temporar.

Zach Shallbetter Zach Shallbetter
25 iul. 2011 23:55:23
0

O soluție alternativă este disponibilă prin utilizarea user_new_form_tag care se află în interiorul tag-ului de început al formularului din pagina user-new.php. Este plasat la final, așa că dacă afișezi HTML după acesta, trebuie doar să începi output-ul cu > și să elimini ultimul > din propriul cod. Ca în exemplul:

function add_new_field_to_useradd()
{
    echo "><div>"; // Observă primul '>' aici. Închidem propriul output într-un element 'div'.

    // Codul dorit pentru output ar trebui să fie aici.

    echo "</div"; // Observă lipsa '>' aici.
}

add_action( "user_new_form_tag", "add_new_field_to_useradd" );

user_new_form_tag este situat în user-new.php aproximativ la linia 303 (cel puțin în WP3.5.1):

...
<p><?php _e('Creează un utilizator nou și adaugă-l pe acest 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" />
...

Desigur, dezavantajul aici este că toate câmpurile personalizate trebuie să apară primele în formular, înaintea câmpurilor declarate în nucleul WP.

19 iun. 2013 15:22:33
1

Următorul cod va afișa "Informații biografice" în formularul "Adaugă utilizator"


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

6 feb. 2014 10:31:03
Comentarii

Un răspuns care conține doar cod este un răspuns slab. Încearcă să incluzi link-uri către articole relevante din Codex și să explici codul aici.

Mayeenul Islam Mayeenul Islam
6 feb. 2014 11:56:49
1

Pentru a face acest lucru, va trebui să modificați manual pagina user-new.php. Nu este metoda corectă de a gestiona acest lucru, dar dacă aveți nevoie urgentă, iată cum se poate face.

Am adăugat:

<tr class="form-field">
    <th scope="row"><label for="company_name"><?php _e('Numele Companiei') ?> </label></th>
    <td><input name="company_name" type="text" id="company_name" value="<?php echo esc_attr($new_user_companyname); ?>" /></td>
</tr>

De asemenea, am adăugat informația în functions.php

   function my_custom_userfields( $contactmethods ) {
    $contactmethods['company_name']             = 'Numele Companiei';
    return $contactmethods;
   }
   add_filter('user_contactmethods','my_custom_userfields',10,1);
3 aug. 2011 21:01:38
Comentarii

Acesta este răspunsul funcțional.

sanjeev shetty sanjeev shetty
5 iun. 2020 04:07:46
0

Acest lucru nu va funcționa pentru pagina de adăugare a unui nou utilizator, dar dacă doriți să implementați această funcționalitate pe pagina "Profilul tău" (unde utilizatorii își pot edita profilul), atunci puteți încerca acest cod în 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>Informații adiționale de profil</h3>
    <table class="form-table">
        <tr>
            <th><label for="companyname">Numele companiei</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">Unde te afli?</span>
            </td>
        </tr>
    </table>
<?php }
9 ian. 2013 23:50:51
0

(pentru răspunsul Mc-Gee) Mulțumesc mult pentru acest cod! Încă o întrebare, cum pot insera o funcție în acest cod pentru a verifica dacă câmpurile sunt completate corect? ... de exemplu, vreau ca numele Companiei să fie doar cu litere mari... cum pot scrie această funcție, vă rog?

6 dec. 2024 11:39:36