web-dev-qa-db-fra.com

Page privée protégée avec nom d'utilisateur et mot de passe

Nous construisons un site WordPress où l’une des pages doit être accessible via un nom d’utilisateur et un mot de passe.

Je sais que je peux créer une page "privée", sur laquelle l'utilisateur peut saisir un mot de passe. Cependant, notre client nous a demandé de créer des combinaisons uniques de nom d'utilisateur/mot de passe pour cette page particulière. Pour cette raison, j'aimerais également intégrer la possibilité de réinitialiser un mot de passe oublié.

J'ai fait des recherches en ligne mais je n'ai trouvé aucune solution viable. Je me demande s'il existe une meilleure pratique pour cela. Je pense que nous pourrions peut-être créer un nouveau rôle d'utilisateur et masquer le tableau de bord WordPress pour ce type d'utilisateur? Suis-je sur la bonne voie? Toute expérience serait grandement appréciée.

1
shackleton

Alors voici ce que nous essayons de faire:

IF Un utilisateur se connecte et possède un rôle spécifique (Abonné), puis le redirige vers une page spécifique.

IF Un utilisateur essaie d'accéder au panneau d'administration, puis le redirige vers une page spécifique.

Nous allons utiliser 3 crochets pour les problèmes ci-dessus:

Tout d'abord, créons notre redirection:

/**
 * Redirect subscribers to specific page
 * @param string $redirect
 * @param string $request
 * return string
 */
function member_redirect( $redirect, $request ) {
    if( current_user_can( 'subscriber' ) ) {
        return $specific_page
    }

    return $redirect;
}
add_filter( 'login_redirect', 'member_redirect', 10, 2 );

Si l'utilisateur actuel est un abonné, nous remplacerons le $specific_page par l'URL de la page, sinon nous le laisserons aller à l'endroit où il était initialement dirigé.

Ensuite, assurons-nous que les abonnés ne peuvent pas accéder au panneau d'administration:

/**
 * If user is subscriber AND trying to access admin panel, redirect them to specific page
 */
function subs_adminpanel_redirect(){
    if ( current_user_can( 'subscriber' ) ){
        wp_redirect( $specific_page );
        exit;
    }
}
add_action( 'admin_init', 'subs_adminpanel_redirect' );

Encore une fois, vous pouvez remplacer $specific_page par votre URL réelle.

Enfin, supprimons la barre d'administration pour que l'utilisateur ne sache même pas qu'il existe un tableau de bord.

/**
 * Remove adminbar for Subscribers
 */
function subs_remove_adminbar() { 
    if( ! current_user_can( 'subscriber' ) ) {
        add_filter( 'show_admin_bar', '__return_false' );   
    }
}
add_action( 'after_setup_theme', 'subs_remove_adminbar' );

C'est assez simple, s'ils sont abonnés, supprimez la barre d'administration pour eux.

Une étape shackleton indiquée dans les commentaires ci-dessous est par défaut, les abonnés n'ont pas accès à l'affichage des pages privées. Nous devons ajouter ceci en tant que capacité:

/**
 * Allow Subscribers to view Private Pages
 */
function add_theme_caps() {
    $role = get_role( 'subscriber' );
    $role->add_cap( 'read_private_pages' );
}
add_action( 'admin_init', 'add_theme_caps' );

Vous voudriez jeter tout cela dans votre fichier functions.php à un endroit et le tester. Encore une fois, cela ne fonctionne que pour les abonnés et uniquement si vous remplacez $specific_page par votre URL de page réelle.

1
Howdy_McGee