web-dev-qa-db-fra.com

Comment ajouter/enregistrer un champ personnalisé dans les paramètres utilisateur/profil "Liste de cases à cocher"

je travaille sur un système personnalisé pour mon site, où les utilisateurs peuvent disposer d'un compte, d'une page de paramétrage et d'une page de profil distincts pour rendre mon site un peu plus interactif et de type communauté. avec d'autres choses supplémentaires. Je suis novice en codage, j'ai réussi à créer les pages de profil, etc.

En ce moment, je suis coincé dans l'ajout d'une liste de cases à cocher à la page des paramètres de l'utilisateur. où un utilisateur peut sélectionner plusieurs tags en tant qu'intérêt .. afin que je puisse utiliser ceux-ci pour lui montrer les messages recommandés au hasard sur sa page de compte.

j'ai pu ajouter deux champs supplémentaires (Twitter/Facebook) dans la page des paramètres avec ce code:

function add_bkmrks_contactmethod( $bcontactmethods ) {
$bcontactmethods['Twitter'] = 'Twitter';
$bcontactmethods['Facebook'] = 'Facebook';
return $bcontactmethods;
}
add_filter('user_contactmethods','add_bkmrks_contactmethod',10,1);

et ils peuvent être facilement appelés sur des pages aussi bien en utilisant $userinfo->Twitter etc. mais je n'ai aucune idée de la liste à cocher ... et en appelant le tableau etc.

Si vous rencontrez un article ou un morceau de code qui puisse m'aider à résoudre ce problème, je vous en serai reconnaissant :) A bientôt Ayaz

1
Ayaz Malik

Justin Tadlock a un bon tutoriel pour vous aider à démarrer:

http://justintadlock.com/archives/2009/09/10/adding-and-using-custom-user-profile-fields

Cependant, il y a des spécificités à traiter avec les cases à cocher, et du code personnalisé si vous souhaitez créer des cases à cocher correspondant à des balises/catégories.

Pour générer les champs de formulaire et enregistrer les données, utilisez l'extrait suivant:

<?php

function user_interests_fields( $user ) {
    // get product categories
    $tags = get_terms('post_tag', array('hide_empty' => false));
    $user_tags = get_the_author_meta( 'user_interests', $user->ID );
    ?>
    <table class="form-table">
        <tr>
            <th>My interests:</th>
            <td>
        <?php
        if ( count( $tags ) ) {
            foreach( $tags as $tag ) { ?>
            <p><label for="user_interests_<?php echo esc_attr( $tag->slug); ?>">
                <input
                    id="user_interests_<?php echo esc_attr( $tag->slug); ?>"
                    name="user_interests[<?php echo esc_attr( $tag->term_id ); ?>]"
                    type="checkbox"
                    value="<?php echo esc_attr( $tag->term_id ); ?>"
                    <?php if ( in_array( $tag->term_id, $user_tags ) ) echo ' checked="checked"'; ?> />
                <?php echo esc_html($tag->name); ?>
            </label></p><?php
            }
        } ?>
            </td>
        </tr>
    </table>
    <?php
}
add_action( 'show_user_profile', 'user_interests_fields' );
add_action( 'edit_user_profile', 'user_interests_fields' );

    // store interests
    function user_interests_fields_save( $user_id ) {
        if ( !current_user_can( 'edit_user', $user_id ) )
            return false;
        update_user_meta( $user_id, 'user_interests', $_POST['user_interests'] );
    }
    add_action( 'personal_options_update', 'user_interests_fields_save' );
    add_action( 'edit_user_profile_update', 'user_interests_fields_save' );

?>

Vous pouvez ensuite appeler la fonction get_the_author_meta() pour obtenir votre tableau d'identifiants de balises pouvant être utilisés dans une requête, par exemple:

query_posts( array( 'tag_id' => get_the_author_meta( 'user_interests', $user_id ) ) );
8
sanchothefat