web-dev-qa-db-fra.com

Comment afficher le profil utilisateur public avec 2 champs supplémentaires? (Code source GitHub inclus)

En tant que novice WordPress, j'essaie de créer un plugin, ce qui obligera les utilisateurs à spécifier leur ville et leur sexe lors de leur inscription, puis d'afficher un profil personnel page pour chaque utilisateur affichant ces informations.

J'ai vérifié mon plugin dans GitHub: wp-city-gender.php .

Pour la partie inscription, j’ai suivi la personnalisation du formulaire d’inscription doc et cela semble bien fonctionner - la ville supplémentaire et les champs de genre sont affichés dans le formulaire d’enregistrement et stockés ultérieurement dans la table wp_usermeta. Ils sont également modifiables dans la partie Utilisateurs du tableau de bord:

Users screenshot

De plus, je redirige les liens des commentateurs vers /user/user_id en utilisant ce code:

define('PROFILE', '<a href="/user/%d" rel="external nofollow" class="url">%s</a>');

function get_comment_author_link($cid) {
    global $comment;
    return sprintf(PROFILE, $comment->user_id, $comment->comment_author);
}

add_action('get_comment_author_link',  'get_comment_author_link');

screenshot

Ma question est la suivante: Comment puis-je ajouter une page de profil personnel pour chaque utilisateur, affichant son nom et les 2 champs supplémentaires?

Ce que je ne veux pas: Je ne peux pas simplement créer un script simple PHP récupérant des données de wp_usermeta pour un certain user_id numérique - car il ne serait pas intégré à mon site WordPress , c’est-à-dire qu’il n’affiche pas le logo en haut et le pied de page en bas.

2
Alexander Farber

Je pense qu’un moyen facile de le faire serait d’utiliser la structure de gabarit wordpress, jetez un oeil à Codex: Templates et Codex: Hiérarchie des modèles pour un aperçu général. Mais vous pouvez utiliser les modèles d'auteur Codex: Modèles d'auteur - pour cela, vous devrez probablement adapter le fichier author.php à vos besoins.

De plus, vous souhaitez modifier la structure de réécriture du modèle d'auteur en fonction de vos objectifs. Des informations générales sont disponibles sur Codex: API de réécriture et Codex: Référence de classe/WP_Rewrite . Outre que cela a été répondu à plusieurs reprises ici sur WPSE, pas besoin de le dupliquer, alors jetez un oeil à: afficher une page de profil utilisateur enregistrée et/ou Comment personnaliser la base de l'auteur sans $ this-> front? .

2
Nicolai

Vous faites des hypothèses sur le système utilisateur de WordPresses qui sont incorrectes.

author_link et comment_author_link renvoient la valeur que les utilisateurs fournissent dans le champ website lorsqu'ils laissent un commentaire ou sur leur profil utilisateur (s'ils se sont inscrits). Ces champs peuvent également être vides, mais désigneront presque toujours un site externe, le cas échéant.

Il ne crée en aucun cas un lien vers une page de profil. Par défaut, WordPress ne le fait pas. C'est pourquoi les gens ont créé de nombreux plugins autour de cette idée (des pages de profil jusqu'aux pages telles que buddy press).

Author.php est une archive pour les messages de l'auteur, et un utilisateur! == auteur

Si vous souhaitez avoir des pages de profil utilisateur publiques et des champs personnalisés sur les profils, je vous suggère fortement d'utiliser l'un des nombreux plug-ins conçus pour le faire déjà: sa configuration n'est pas une simple fonction ni une solution rapide, vous pouvez le faire. Ne vous attendez pas à ce que quelqu'un fasse ce travail pour vous avec plus de 50 points Internet.

1
aj-adl

J'ai essayé de créer un formulaire d'enregistrement personnalisé il y a quelque temps en utilisant wordpress. Je voulais enregistrer plusieurs champs personnalisés et les rendre obligatoires, alors j'ai essayé de trouver le bon plugin au lieu de réinventer la roue.

J'ai trouvé un bon plugin appelé theme my login: http://wordpress.org/plugins/theme-my-login/

Vous aurez besoin de lire un peu pour faire cela, mais heureusement nous avons de la documentation qui peut vous aider sur ce site:

Voyez ici comment ajouter des champs d’inscription supplémentaires: http://www.jfarthing.com/development/theme-my-login/adding-extra-registration-fields/

Fondamentalement, vous devez:

1) Installer le plugin

2) Ajoutez register-form.php dans la disposition de votre thème.

3) Modifiez votre copie de votre register-form.php Pour quelque chose comme ceci:

<div class="login" id="theme-my-login<?php $template->the_instance(); ?>">

<?php $template->the_action_template_message( 'register' ); ?>
<?php $template->the_errors();  

?>
<form name="registerform" id="registerform<?php $template->the_instance(); ?>" action="<?php $template->the_action_url( 'register' ); ?>" method="post" autocomplete = "off">

    <input type="text" name="user_login" id="user_login<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( 'user_login' ); ?>" size="20" />
    <input type="text" name="user_email" id="user_email<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( 'user_email' ); ?>" size="20" />
    <input type="text" placeholder="Gender" name="user_gender" id="user_gender<?php $template->the_instance(); ?>" value="<?php $template->the_posted_value( 'user_gender' ); ?>" required />
    <input type="text" placeholder="City" type="text" id="user_city<?php $template->the_instance(); ?>" name="user_city" value="<?php $template->the_posted_value( 'user_city' ); ?>"/>


    <?php do_action( 'register_form' ); ?>

    <p class="submit">
        <input type="submit" name="wp-submit" class="yellow btn1 uppercase right os700" id="wp-submit<?php $template->the_instance(); ?>" value="<?php esc_attr_e( '[ Submit ]' ); ?>" />
        <input type="hidden" name="redirect_to" value="<?php $template->the_redirect_url( 'register' ); ?>" />
        <input type="hidden" name="instance" value="<?php $template->the_instance(); ?>" />
        <input type="hidden" name="action" value="register" />
    </p>
</form>
<?php $template->the_action_links( array( 'register' => false ) ); ?>

Ici, vous pouvez modifier et ajouter des champs personnalisés et autant de HTML et de CSS que vous le souhaitez.

Ensuite, sur votre functions.php, vous devrez enregistrer deux actions afin que vous puissiez commencer.

Pour enregistrer l'utilisateur:

function tml_user_register( $user_id ) {
    if ( !empty( $_POST['user_login'] ) )
        update_user_meta( $user_id, 'user_login', $_POST['user_login'] );
    if ( !empty( $_POST['user_email'] ) )
    update_user_meta( $user_id, 'user_email', $_POST['user_email'] );
    if ( !empty( $_POST['user_gender'] ) )
        update_user_meta( $user_id, 'user_gender', $_POST['user_gender'] );
    if ( !empty( $_POST['user_city'] ) )
        update_user_meta( $user_id, 'user_city', $_POST['user_city'] );

    }

add_action( 'user_register', 'tml_user_register' );`

Pour afficher le contenu sur le tableau de bord:

add_action ( 'show_user_profile', 'my_show_extra_profile_fields' );
add_action ( 'edit_user_profile', 'my_show_extra_profile_fields' );

Avec ces deux actions, vous pouvez afficher vos profils utilisateur sur votre tableau de bord, ajoutez-les également à votre functions.php.

    <?php function my_show_extra_profile_fields ( $user ){ ?>
    <h3>Custom profile information</h3>
    <table class="form-table">
        <tr>
            <th><label for="user_gender"><?php _e('Gender');?></label></th> 
            <td><input type="text" name="user_gender" id="user_gender" value="<?php echo esc_attr( get_the_author_meta( 'user_gender', $user->ID ) ); ?>" /><br /></td>
        </tr>
        <tr>
            <th><label for="user_city"><?php _e('City');?></label></th>
            <td><input type="text" name="user_city" id="user_city" value="<?php echo esc_attr( get_the_author_meta( 'user_city', $user->ID ) ); ?>" /><br /></td>
        </tr>
    </table>

<?php }

Si vous voulez laisser les utilisateurs mettre à jour leurs propres informations, ajoutez quelque chose comme ceci (également dans votre functions.php):

add_action ( 'personal_options_update', 'my_save_extra_profile_fields' );
add_action ( 'edit_user_profile_update', 'my_save_extra_profile_fields' );

function my_save_extra_profile_fields( $user_id ){
    if ( !current_user_can( 'edit_user', $user_id ) )
        return false;
    update_usermeta( $user_id, 'user_gender', esc_attr(trim($_POST['user_gender'])) );
    update_usermeta( $user_id, 'user_city', esc_attr(trim($_POST['user_city'])) );

}

C’est beaucoup, mais utile, essayez, lisez la documentation et bonne chance, espérons que cela vous aide.

ÉDITÉ

Ok, donc si vous voulez montrer la méta de l'utilisateur, vous pouvez utiliser le author.php et le profile-form.phpsitué dans le dossier templates, ainsi qu’avec le register-form.php autres fichiers, vous pouvez copier ce fichier dans votre dossier de thème et le personnaliser.

Pour afficher la méta personnalisée sur votre author.php, ajoutez le shortcode suivant:

echo do_shortcode('[theme-my-login default_action="profile" show_title="1"]');

Ensuite, vous pouvez afficher le contenu en utilisant quelque chose comme ceci:

echo $profileuser->user_city
echo $profileuser->user_gender
1
Miguel Garrido