web-dev-qa-db-fra.com

Création d'une page utilisateur publique personnalisée

J'aimerais développer un plugin qui me permet d'avoir des pages utilisateur personnalisées. J'aime beaucoup la façon dont le modèle d'archive d'auteur gère l'URL:/author/nom d'utilisateur. Je ne veux pas réécrire le author_base car j'aimerais garder cette fonctionnalité intacte.

J'aimerais répliquer cette mise en page d'URL propre dans mon plug-in, de sorte que lorsqu'un utilisateur accède à/users/username, il se place dans mon modèle personnalisé. J'aimerais savoir si quelqu'un a des exemples sur la manière d'analyser correctement le nom d'utilisateur à partir de l'URL afin que je puisse rechercher les données de l'utilisateur à partir du plug-in et afficher mon modèle.

4
Pat

J'ai trouvé la réponse à cette question à partir de @bybloggers trouvé ici. https://wordpress.stackexchange.com/a/58793/12920

J'ai légèrement modifié son code pour l'adapter à mes besoins, mais c'est le code qui a fonctionné pour moi et qui correspond exactement à ce que je cherchais:

// Create the query var so that WP catches the custom /member/username url
function userpage_rewrite_add_var( $vars ) {
    $vars[] = 'member';
    return $vars;
}
add_filter( 'query_vars', 'userpage_rewrite_add_var' );

// Create the rewrites
function userpage_rewrite_rule() {
    add_rewrite_tag( '%member%', '([^&]+)' );
    add_rewrite_rule(
        '^member/([^/]*)/?',
        'index.php?member=$matches[1]',
        'top'
    );
}
add_action('init','userpage_rewrite_rule');

// Catch the URL and redirect it to a template file
function userpage_rewrite_catch() {
    global $wp_query;

    if ( array_key_exists( 'member', $wp_query->query_vars ) ) {
        include (TEMPLATEPATH . '/user-profile.php');
        exit;
    }
}
add_action( 'template_redirect', 'userpage_rewrite_catch' );

Après que cela soit dans mon fichier functions.php, je devais ré-enregistrer mes permaliens.

Parfois, ré-enregistrer les permaliens ne permettait pas d'achever le travail à 100% et naviguer sur www.monsite.com/membre/nom d'utilisateur donnerait 404, je devais donc vider manuellement les règles en les mettant dans mon functions.php et en chargeant mon site une fois. Ensuite, supprimez-le afin que je ne l'exécute pas à chaque chargement du site, car cela entraîne une surcharge inutile.

// Code needed to finish the member page setup
function memberpage_rewrite() {
     global $wp_rewrite;
     $wp_rewrite->flush_rules();
}
add_action('init','memberpage_rewrite');
4
Pat