web-dev-qa-db-fra.com

Profil utilisateur/Ajouter des champs personnalisés

Bonjour: J'essaie d'ajouter 7 champs personnalisés à la page standard Wordpress wp-admin/profile.php. Quelques sites suggèrent un peu de code pour le faire, par exemple:

http://wpengineer.com/2173/custom-fields-wordpress-user-profile/

Toutefois, je souhaite pouvoir ajouter mes champs personnalisés afin qu’ils apparaissent exactement sous la zone "Informations biographiques" et au-dessus du champ "Modifier le mot de passe". Tout ce que j'ai lu et essayé place des champs personnalisés au bas de la page, mais je souhaite qu'ils apparaissent entre la case "Informations biographiques" et au-dessus du champ "modifier le mot de passe".

Comment puis-je faire ceci? C'est possible? Cela implique-t-il également l'utilisation de javascript? S'il vous plaît donnez votre avis. Je vous remercie.

3
Steve Doran

Il n'y a pas de moyen WordPress pour ajouter des champs entre la bio et le mot de passe de l'utilisateur, mais comme vous l'avez dit vous-même, vous pouvez le faire en javascript. Ci-dessous se trouve le code qui ajoute un seul champ pour vous donner un exemple sur la façon dont vous pouvez atteindre le même objectif.

REMARQUE: Le code ci-dessous affiche uniquement les champs, mais ne traite aucune information et n'enregistre pas les valeurs de champ, car cette partie est identique à celle décrite dans l'article lié dans la question.

Ajouter les champs

Placez le code ci-dessous dans votre fichier functions.php pour afficher les champs.

function wpse39285_add_custom_user_profile_fields( $user ) {
?>
    <table id="custom_user_field_table" class="form-table">
        <tr id="custom_user_field_row">
            <th>
                <label for="custom_field"><?php _e('Field', 'your_textdomain'); ?></label>
            </th>
            <td>
                <input type="text" name="custom_field" id="custom_field" value="<?php echo esc_attr( get_the_author_meta( 'custom_field', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description"><?php _e('Please enter your custom_field value.', 'your_textdomain'); ?></span>
            </td>
        </tr>
    </table>
<?php 
}
add_action( 'show_user_profile', 'wpse39285_add_custom_user_profile_fields' );
add_action( 'edit_user_profile', 'wpse39285_add_custom_user_profile_fields' );

Le code ci-dessus placera vos champs personnalisés après les champs de mot de passe.

Déplacer les champs

Le code ci-dessous insère un javascript dans la tête de l'administrateur WordPress uniquement si l'utilisateur visualise son propre profil ou si un administrateur modifie le profil de quelqu'un d'autre.

function wpse39285_field_placement_js() {
    $screen = get_current_screen();
    if ( $screen->id != "profile" && $screen->id != "user-edit" ) 
        return;
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            field = $('#custom_user_field_row').remove();
            field.insertBefore('#password');
        });
    </script>
    <?php
}
add_action( 'admin_head', 'wpse39285_field_placement_js' );

Le javascript ci-dessus fait que le champ se déplace entre le mot de passe et les champs bio. Si l'utilisateur visualise la page à partir d'un navigateur autre que javascript, les champs ne seront pas déplacés et s'afficheront comme ils le font par défaut.

Champ avec navigateur compatible JavaScript

field with javascript enabled browser

Champ avec navigateur non JavaScript

field with javascript disabled browser

4
Hameedullah Khan

Mon conseil est le suivant: ne jouez pas/ne piratez pas le système. Créez du contenu là où les développeurs principaux le souhaitent. la raison pour laquelle vous voulez que les champs soient exactement là n’est probablement pas une bonne solution pour contourner le flux de Wordpress.

Utilisez le crochet d’action profile_personal_options pour ajouter une nouvelle section aux paramètres requis sur la page. Ceci est non seulement techniquement valable, mais également plus clair pour les utilisateurs (qui savent à quoi ressemble normalement WP).

4
Raphael

Pour moi, la réponse de Hameedullah Khan a bien fonctionné. Je viens de corriger un peu parce que mes nouveaux champs ont cassé la mise en page. Donc, dans le code jQuery j'ai ajouté

jQuery(document).ready(function($) {
            field = $('#custom_user_field_row').remove();
            field.insertBefore('#password');
            $('#custom_user_field_row').wrapAll('<tr><td colspan="2"></td></tr>');
        });

garder la table alignée.

0
Ziqurrat

Comme vous ne pouvez pas vraiment faire cela, je vous recommanderais d’utiliser le plug-in Theme My Login , un plug-in très simple pour les membres, qui crée simplement des pages de "connexion", de "déconnexion" et de "profil". adapter la personnalisation de votre thème. Vous pourrez modifier l'ordre des champs à votre guise dans un fichier distinct que vous pourrez ajouter à votre thème enfant, de sorte que vous ne rencontrerez aucun problème en cas de problème.

La seule chose à faire est que votre profil ne sera plus visible à user-edit.php mais à your-profile.php.

0
user3206631