Rendre les pages WooCommerce accessibles aux utilisateurs connectés uniquement

12

J'ai un site Web utilisant WordPress et un commerce électronique utilisant WooCommerce. Je souhaite que ma boutique (et toutes ses pages) soit vue uniquement par les utilisateurs connectés.

Via le plugin User Access Manager , j'ai refusé l'accès à la page de la boutique, mais avec un lien direct vers un produit, etc., on peut néanmoins accéder à cette page particulière, même si l'utilisateur n'est pas connecté.

Comment puis-je rediriger les utilisateurs, qui ne sont pas connectés, vers une autre page s'ils essaient d'accéder à une page WooCommerce?

Alessandro
la source

Réponses:

24

Mettez ceci dans votre functions.phpdossier:

function wpse_131562_redirect() {
    if (
        ! is_user_logged_in()
        && (is_woocommerce() || is_cart() || is_checkout())
    ) {
        // feel free to customize the following line to suit your needs
        wp_redirect(home_url());
        exit;
    }
}
add_action('template_redirect', 'wpse_131562_redirect');

Qu'est ce que ça fait?
Nous vérifions si un utilisateur non connecté souhaite voir une page WooCommerce et le redirige vers notre page d'accueil.

tfrommen
la source
Merci de votre aide. Le fichier functions.php est dans mon dossier de thème ?? Et comment puis-je rappeler cette fonction depuis la page produit? Merci :-)
Alessandro
Merci beaucoup. Votre code fonctionne bien pour moi. Merci beaucoup :)
Alessandro
1
Assurez-vous que vous ne définissez aucune des pages de woocommerce comme votre page d'accueil, car le site ne fonctionnera plus.
SPRBRN
7

Je viens de changer la redirection vers

wp_redirect( site_url('my-account/') )

afin que les utilisateurs soient redirigés sur la page "Mon compte" s'ils ne sont pas connectés ou enregistrés.

Pierre
la source
2
Ce n'est pas la meilleure méthode pour rediriger vers la My Accountpage. Il est préférable de récupérer le permalien de la page Mon compte que vous avez liée dans vos paramètres WooCommerce. De cette façon, chaque fois que le permalien est modifié ou que vous avez un site multilingue exécutant le permalien sera toujours correctement récupéré. En bref: il vaut mieux ne pas coder en dur les permaliens / slugs (ou les URL en général). Une meilleure méthode serait:wp_redirect( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) );
Rens Tillmann
vous codez manquant; fin
user889030
0

Je changerais pour ça

wp_safe_redirect( wc_get_page_permalink( 'myaccount' ) );

au lieu de

wp_redirect( site_url('my-account/') );
Ilias Benetos
la source
2
Pourriez-vous expliquer pourquoi cela aidera, afin que d'autres personnes puissent apprendre quelque chose de votre réponse?
Krzysiek Dróżdż