[Résolu] Limiter l’accés à la boutique aux visiteurs connectés

  • WordPress :4.9.9
  • Statut : résolu
15 sujets de 1 à 15 (sur un total de 16)
  • Auteur
    Messages
  • #2212610
    Dge
    Participant
    Padawan WordPress
    83 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL :
    • Thème utilisé : perso
    • Extensions en place : quelques une
    • Nom de l’hébergeur :
    • Adresse du site :

    Problème(s) rencontré(s) :

    Je suis en train de mettre en place une boutique uniquement accessible aux pro sur un site accessible au plus grand nombre. Pour  avoir accès à la boutique il faut donc avoir un compte avec pseudo et mot de passe. Et on ne peux pas s’inscrire tous seul c’est moi qui crée le compte du client pro.

    J’arrive bien a masquer ma boutique et a la faire apparaitre après connexion à mon compte. Cependant si je tape l’url de la boutique directement dans le navigateur j’y accède sans avoir à me connecté et ça c’est pas génial. Comment puis je faire pour que l’url ne soit accessible que lorsque je suis connecté ? J’ai le même problème sur les pages mon compte et panier.

     

    Est ce que cela est possible avez vous une idée ?

     

    Merci par avance. ++ Dgédgé

    #2212676
    Li-An
    Modérateur
    Maître WordPress
    20592 contributions

    Bonjour, il existe des extensions pour protéger du contenu. Par exemple https://fr.wordpress.org/plugins/simple-membership/ ou https://fr.wordpress.org/plugins/wp-private-content-plus/, https://wordpress.org/plugins/restrict-content/ ou S2Member mais elles sont sûrement un peu lourdes pour ce que vous voulez faire mais sinon ça nécessite que vous mettiez du code dans votre thème et c’est un autre type de lourdeur.

    #2212738
    Dge
    Participant
    Padawan WordPress
    83 contributions

    Bonjour Li-An.

    Merci d’intervenir. J’ai bien trouver des choses sur S2Menber mais le plugin me semble lourd pour le besoin que j’ai.

    Pour ce qui est du code a rajouter j’ai trouver ce lien. Je pense que ce doit être une piste mais je ne vois pas sur quel fichier il faut que je mette ce genre de code ni les modifications que je dois apportés

     

    #2212773
    Li-An
    Modérateur
    Maître WordPress
    20592 contributions

    C’est en effet le code auquel je pensais. Il faudrait en effet l’insérer dans le template des pages correspondant. Il faudrait donc savoir si ce sont des pages que vous créez ou générées par une extension.

    #2212807
    Dge
    Participant
    Padawan WordPress
    83 contributions

    Ok la ou ça me pose problème c’est au niveau de la page boutique. Cette page est créé par woocommerce. je n’ai pas fait de template pour cela.

    Du coup je ne vois pas trop comment ajouter cette condition et surtout sur quel fichier.

    #2213043
    Li-An
    Modérateur
    Maître WordPress
    20592 contributions

    Les templates de WooCommerce sont situés dans votre thème s’il est compatible. https://docs.woocommerce.com/document/template-structure/

    #2213431
    Dge
    Participant
    Padawan WordPress
    83 contributions

    Salut, Je suis en train d’essayer cette méthode. Cela à l’air de fonctionner sur les pages « panier« , « commande » et « mon compte« . Si je tape l’url et que  je ne suis pas connecté je suis redirigé vers ma page d’accueil. Si je suis connecté cela fonctionne. J’ai juste un problème d’affichage, en effet le footer se retrouve à l’intérieur du corps de ma page. Je pense que cela viens de ma concaténation mais pas sur.

    Pouvez vous me dire si vous voyez une ou des erreurs dans le code suivant ?

    <?php
    /*
    * Template name: Section sécurisé
    */
    ?>
    <?php
    if( is_user_logged_in() ) {
    if ( have_posts() ) while ( have_posts() ) : the_post();
    	
    	echo get_header("trois") . '<section id="option">' . '<section id="main-sidebar">' . '<h1 class="pan">Votre ' . get_the_title() . '</h1>'; the_content(); '</section>' . '</section>'. '<div class="clear"></div> ' ; get_footer();
    	 
    endwhile;
    }else{
    ?>
    <?php header('Location:http://localhost/ma-page-d-accueil/'); ?>
    <?php }	?>

    Voici le code avant  :

    <?php /* Template Name: PANIER */ ?>
    <?php get_header("trois"); ?>
    	<section id="option">	
    		<section id="main-sidebar">
    			<h1 class="pan">Votre <?php the_title(); ?></h1>	
    			<?php if (have_posts()) :while (have_posts()) :the_post(); ?>
    			<?php the_content(); ?>
    			<?php endwhile;else : ?>
    			<p>Bonjour, désolé, mais la page désirée n'est pas accessible</p>
    			<?php endif; ?>
    		</section>
    	</section>	
    	<div class="clear"></div>
    <?php get_footer(); ?>

    Voilà pour la partie qui fonctionne.

    Il me reste cependant un soucis. Les 3 pages citées plus haut utilise un template de page, mais la page « boutique » n’en utilise pas et je ne vois pas du tout comment faire pour adapter le code. Avez vous une piste ?

    Merci par avance pour les retouts.

    ++ Dgédgé

    #2213434
    Li-An
    Modérateur
    Maître WordPress
    20592 contributions

    La page boutique est une page d’archive. Il doit y avoir un template archive correspondant dans le thème. Installez https://www.echodesplugins.li-an.fr/plugins/what-the-file/ pour retrouver le template.

    Le footer ne doit pas être dans la boucle et c’est ce que vous avez fait il me semble bien.

    #2213447
    Dge
    Participant
    Padawan WordPress
    83 contributions

    Bonjour Li-An merci pour le retour.  D’où peut venir l’erreur d’affichage alors ? Le footer se retrouve à l’intérieur du corp

    What the file ne fonctionne pas sur mon thème (thème perso) ceci explique peut être cela. Mais je pense que le fichier concerné pour l’affichage de la boutique est celui ci : archive-product.php

    <?php
    /**
     * The Template for displaying product archives, including the main shop page which is a post type archive.
     *
     * Override this template by copying it to yourtheme/woocommerce/archive-product.php
     *
     * @author 		WooThemes
     * @package 	WooCommerce/Templates
     * @version     2.0.0
     */
    
    if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
    get_header('trois'); ?>
    			<section id="option">
    				<section id="containbouti">
    					<?php if ( apply_filters( 'woocommerce_show_page_title', true ) ) : ?>
    						<h1 class="page-title"><?php woocommerce_page_title(); ?></h1>
    					<?php endif; ?>	
    					<?php 
    						// CODE AFFICHAGE IMAGE CATEGORIE
    						if ( is_product_category() ){
    							global $wp_query;
    							// get the query object
    							$cat = $wp_query->get_queried_object();
    							// get the thumbnail id using the queried category term_id
    							$thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true ); 
    							// get the image URL
    							$image = wp_get_attachment_url( $thumbnail_id ); 
    							// print the IMG HTML
    							echo "<div class='imgcatprod'><img src='{$image}' alt='' width='100%' height='auto' /></div>";
    						}
    					?>  
    					<?php if ( have_posts() ) : ?>
    
    					<?php
    						/**
    						 * woocommerce_before_shop_loop hook
    						 *
    						 * @hooked woocommerce_result_count - 20
    						 * @hooked woocommerce_catalog_ordering - 30
    						 */
    						do_action( 'woocommerce_before_shop_loop' );
    					?>
    					
    					<?php woocommerce_product_loop_start(); ?>
    
    					<?php woocommerce_product_subcategories(); ?>
    
    						<?php while ( have_posts() ) : the_post(); ?>				
    							<?php woocommerce_get_template_part( 'content', 'product' ); ?>
    						<?php endwhile; // end of the loop. ?>
    
    					<?php woocommerce_product_loop_end(); ?>
    						<?php
    							/**
    							 * woocommerce_after_shop_loop hook
    							 *
    							 * @hooked woocommerce_pagination - 10
    							 */
    							do_action( 'woocommerce_after_shop_loop' );
    						?>
    						
    					<?php elseif ( ! woocommerce_product_subcategories( array( 'before' => woocommerce_product_loop_start( false ), 'after' => woocommerce_product_loop_end( false ) ) ) ) : ?>
    
    						<?php woocommerce_get_template( 'loop/no-products-found.php' ); ?>
    
    					<?php endif; ?>
    
    					<?php
    						/**
    						 * woocommerce_after_main_content hook
    						 *
    						 * @hooked woocommerce_output_content_wrapper_end - 10 (outputs closing divs for the content)
    						 */
    						do_action('woocommerce_after_main_content');
    						?>
    				</section>
    			</section>
    		<?php get_footer(); ?>
    	</body>
    </html>

    Est ce ici qu’il faut ajouter la condition ?

     

    Merci ++ Dgédgé

     

     

    #2213455
    Li-An
    Modérateur
    Maître WordPress
    20592 contributions

    Ben si c’est vous qui faites, c’est à vous de tester 🙂 Je ne suis pas un spécialiste de WooC – ni de la construction de thème.

    Et sortez ce footer de la boucle c’est à dire après endwhile à mon avis.

    #2213461
    Dge
    Participant
    Padawan WordPress
    83 contributions

    Je ne suis hélas pas non plus un spécialiste de woocommerce, c’est la première fois que j’en développe un, qui plus est en autodidacte.  Et mes idées farfelu ne m’aide pas pour la simplicité 🙂

     

    #2214444
    Dge
    Participant
    Padawan WordPress
    83 contributions

    Bon je n’y arrive toujours pas. Ni avec les plugin ni avec des lignes de code. Et je n’arrive pas à adapter ma page d’archive.

    Personne n’a d’idée ?

     

    #2214493
    Dge
    Participant
    Padawan WordPress
    83 contributions

    Il me vient une idée, mais je ne sais pas ou chercher. Est ce qu’il pourrait y avoir une fonction à rajouter au fichier functions.php ?
    Pensez que ce soit une bonne piste ?

    • Cette réponse a été modifiée le il y a 2 months et 1 week par  Dge.
    • Cette réponse a été modifiée le il y a 2 months et 1 week par  Dge.
    #2214532
    Dge
    Participant
    Padawan WordPress
    83 contributions

    Dites moi si c’est stupide ou si cela pourrait le faire. Je vais utiliser des mots simples pour imager mon idée de fonction.

     

    Si le visiteur est identifié

    autoriser l’ouverture de l’url de ma boutique

    sinon

    rediriger vers l’url de ma page d’accueil

     

    Maintenant si l’idée n’est pas farfelu j’aurais besoin d’aide pour l’écrire correctement.

    Merci

     

     

     

     

     

    #2214652
    Dge
    Participant
    Padawan WordPress
    83 contributions

    J’ai résolu mon problème. Voici la solution pour celles et ceux que ça intéresse.

    Il suffit de rajouter ce bout de code au début de la page archive-products.php

    <?php
    // Vérification de connexion pour affichage des pages woocommerce
    
    // si user PAS connecté
    if( !is_user_logged_in() ) 
    {
    //Je redirige vers l'URL de mon choix
      header('location:http://mon-url/'); // Indiquer votre URL
      exit;
    }
    // sinon, OK, on continue...
    ?>

    Il faut également rajouter ce code au début du code du template des pages panier, compte et commande.

    Si vous avez lu ce post en entier, vous avez vu que j’avais trouvé une autre solution, mais celle-ci générée un défaut d’affichage. Ce n’est plus le cas avec cette méthode.

    Ce sujet est résolu pour moi.

    Merci Li-An pour ta participation.

    ++ Dgé

     

    • Cette réponse a été modifiée le il y a 2 months et 1 week par  Dge.
    • Cette réponse a été modifiée le il y a 2 months et 1 week par  Dge.
15 sujets de 1 à 15 (sur un total de 16)
  • Vous devez être connecté pour répondre à ce sujet.