Concevoir un système d’espace membre dans WordPress

Vous avez peut-être déjà eu besoin de créer une zone membre sur votre site WordPress ?
Il y a des plugins qui font ça, comme s2members ou wp member, mais ceux-ci ont de nombreuses options, sont parfois complexe à paramétrer et sont susceptible de ne pas s’adapter parfaitement à votre projet.

Un espace restreint aux utilisateurs connectés
Un espace restreint aux utilisateurs connectés

Ce tutoriel explique comment mettre en place un tel système de A à Z, sans utiliser de plugins particuliers. Le but est de comprendre comment une zone privée fonctionne. Après, vous êtes libre de déléguer certaines fonctionnalités à des extensions, ou bien de copier/coller simplement ces codes, je ne vous en voudrais pas 😛

Plusieurs méthodes

Il existe de nombreuses façons de concevoir un espace privé sur WordPress ; elles varient selon les besoins et le mode de fonctionnement souhaité.

Nous allons voir une méthode générique pour réaliser une zone membre complète, puis nous verrons aussi comment mettre en place quelques variations. Elles vous permettront de faire correspondre cet espace aux spécificités de votre projet.

Gestion des utilisateurs

La première étape, c’est de définir un ensemble d’utilisateurs qui auront des privilèges particuliers. Pour ce tutoriel, nous allons utiliser la gestion des membres native de WordPress, ainsi que le rôle « Abonnés« . Dans certains cas, vous aurez peut-être besoin de créer un rôle (nous parlerons de ça au prochain article).

Les personnes devront donc s’inscrire et s’identifier pour accéder au contenu qui leur est réservé.

Créer un formulaire de connexion

Créer une zone de login est sans doute une des partie les plus simples de cet article, on va donc commencer par ça.

Si c’est facile, c’est parce que WordPress met à disposition une fonction toute faite : wp_login_form()

Elle prend quelques paramètres qui servent, entre autre, à définir les champs du formulaire ou à choisir l’URL où seront redirigés les inscrits une fois connectés.

// Formulaire de connexion
if ( ! is_user_logged_in() ) {
	wp_login_form( array(
        'redirect'       => site_url( '/' ), // par défaut renvoie vers la page courante
        'label_username' => 'Login',
        'label_password' => 'Mot de passe',
        'label_remember' => 'Se souvenir de moi',
        'label_log_in'   => 'Se connecter',
        'form_id'        => 'login-form',
        'id_username'    => 'user-login',
        'id_password'    => 'user-pass',
        'id_remember'    => 'rememberme',
        'id_submit'      => 'wp-submit',
        'remember'       => true, //afficher l'option se ouvenir de moi
        'value_remember' => false //se souvenir par défaut ?
	) );
} else {
	echo '<a href="' . admin_url( 'user-edit.php?user_id='. get_current_user_id() ) .'">Accès au profil</a>';
	echo '<a href="' . wp_logout_url( site_url( '/' ) ) .'">Se déconnecter</a>';
}

Pour afficher le formulaire de connexion sur votre site web, il suffit de coller cette fonction dans votre template, là où vous souhaitez afficher la zone de login.

Ajouter un lien pour récupérer un mot de passe perdu

La fonction prévue par WordPress ne permet pas directement d’ajouter un lien pour récupérer un mot de passe que l’internaute aurait oublié. Cependant, cette fonction contient aussi quelques hooks utiles pour ajouter du contenu avant, après, entre…

Ajoutez le code suivant dans le fichier functions.php de votre thème, pour ajouter ce lien :

// Ajouter le lien pour récupérer le mot de passe, si l'utilisateur ne s'en souvient plus
add_filter( 'login_form_bottom', 'lien_mot_de_passe_perdu' );
function lien_mot_de_passe_perdu( $formbottom ) {
	$formbottom .= '<a href="' . wp_lostpassword_url() . '">Mot de passe perdu ?</a>';
	return $formbottom;
}

Créer un formulaire d’inscription

Là par contre, WordPress ne propose pas de fonction toute faite. Nous allons donc créer la notre.

Cette fonction va contenir un formulaire HTML reprenant les informations nécessaires à la création du compte (login, mot de passe et adresse email). Les données seront transmises, lors de la soumission, au fichier admin-post.php de WordPress.

Ainsi nous pourrons, via une fonction hookée sur admin_post, les vérifier puis procédez à l’inscription du nouvel utilisateur si tout est bon. Si vous souhaitez davantage d’informations sur le fonctionnement d’admin-post, suivez le guide.

Ajouter le code suivant dans le fichier function de votre thème, puis appelez la fonction register_user_form() directement dans le template de votre page d’inscription.

// Formulaire d'inscription
function register_user_form() {
	echo '<form action="' . admin_url( 'admin-post.php?action=nouvel_utilisateur' ) . '" method="post" id="register-user">';

	// Les champs requis
	echo '<p><label for="nom-user">Nom</label><input type="text" name="username" id="nom-user" required></p>';
	echo '<p><label for="email-user">Email</label><input type="email" name="email" id="email-user" required></p>';
	echo '<p><label for="pass-user">Mot de passe</label><input type="password" name="pass" id="pass-user" required><br>';
	echo '<input type="checkbox" id="show-password"><label for="show-password">Voir le mot de passe</label></p>';

	// Nonce (pour vérifier plus tard que l'action a bien été initié par l'utilisateur)
	wp_nonce_field( 'create-' . $_SERVER['REMOTE_ADDR'], 'user-front', false );

	//Validation
	echo '<input type="submit" value="Créer mon compte">';
	echo '</form>';

	// Enqueue de scripts qui vont nous permettre de vérifier les champs
	wp_enqueue_script( 'inscription-front' );
}

// Enregistrement de l'utilisateur
add_action( 'admin_post_nopriv_nouvel_utilisateur', 'ajouter_utilisateur' );
function ajouter_utilisateur() {
	// Vérifier le nonce (et n'exécuter l'action que s'il est valide)
	if( isset( $_POST['user-front'] ) && wp_verify_nonce( $_POST['user-front'], 'create-' . $_SERVER['REMOTE_ADDR'] ) ) {

		// Vérifier les champs requis
		if ( ! isset( $_POST['username'] ) || ! isset( $_POST['email'] ) || ! isset( $_POST['pass'] ) ) {
			wp_redirect( site_url( '/inscription/?message=not-user' ) );
			exit();
		}
		
		$nom = $_POST['username'];
		$email = $_POST['email'];
		$pass = $_POST['pass'];

		// Vérifier que l'user (email ou nom) n'existe pas
		if ( is_email( $email ) && ! username_exists( $nom )  && ! email_exists( $email ) ) {
			// Création de l'utilisateur
	        $user_id = wp_create_user( $nom, $pass, $email );
	        $user = new WP_User( $user_id );
	        // On lui attribue un rôle
	        $user->set_role( 'subscriber' );
	        // Envoie un mail de notification au nouvel utilisateur
	        wp_new_user_notification( $user_id, $pass );
	    } else {
	    	wp_redirect( site_url( '/inscription/?message=already-registered' ) );
			exit();
	    }

		// Connecter automatiquement le nouvel utilisateur
	    $creds = array();
		$creds['user_login'] = $nom;
		$creds['user_password'] = $pass;
		$creds['remember'] = false;
		$user = wp_signon( $creds, false );

		// Redirection
		wp_redirect( site_url( '/?message=welcome' ) );
		exit();
	}
}

Nous allons également avoir besoin d’un peu de jQuery afin de bloquer l’envoi des données en cas d’erreur de saisie, et d’en informer l’internaute.

Commençons par enregistrer et mettre à la file les scripts dont nous aurons besoin :

// Il faut register les scripts que notre formualire utilise
add_action( 'wp_enqueue_scripts', 'register_login_script' );
function register_login_script() {
	wp_register_script( 'inscription-front', get_template_directory_uri() . '/js/inscription.js', array( 'jquery' ), '1.0', true );
	wp_register_script( 'message', get_template_directory_uri() . '/js/message.js', array( 'jquery' ), '1.0', true );
	wp_enqueue_script( 'jquery' );

	// Ce script sera chargé sur toutes les pages du site, afin d'afficher les messages d'erreur
	wp_enqueue_script( 'message' );
}

Dans votre thème, créez un fichier inscription.js, et collez-y le code suivant (placez ce fichier dans le dossier js afin d’être en accord avec la déclaration des scripts).

Il nous permettra de vérifier que les champs requis soient remplis, et que l’email renseigné soit correct.

jQuery( document ).ready( function($) {
	$( '#register-user' ).on( 'submit', function(e) {

		$( this ).find( 'input:required' ).each( function() {
			// On vérifie si les input requis sont remplis
			if ( $( this ).val().trim() == '' ) {
				e.preventDefault();
				$( this ).addClass( 'error' );
			}
		} );

		$( this ).find( 'input[type="email"]' ).each( function() {
			// Regex pour vérifier le champ email
			var pattern = new RegExp(/^[+a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i);
			if ( ! pattern.test( $( this ).val() ) ) {
				e.preventDefault();
				$( this ).addClass( 'error' );
			}
		} );

	} );

	// Toggle hidden password
	$( '#show-password' ).on( 'change', function() {
		if ( $( this ).is( ':checked' ) ) {
			changetype( $( '#pass-user' ), 'text' );
		} else {
			changetype( $( '#pass-user' ), 'password' );
		}
	} );
	
	// Cette fonction permet de changer un type text et type password
	// Se referer à http://codepen.io/CreativeJuiz/pen/cvyEi/
	// ... et https://gist.github.com/3559343 pour comprendre
	function changeType(x, type) {
		if(x.prop('type') == type)
			return x;
		try {
			return x.prop('type', type);
		} catch(e) {
			var html = $("<div>").append(x.clone()).html();
			var regex = '/type=(\")?([^\"\s]+)(\")?/';
			var tmp = $(html.match(regex) == null ?
				html.replace(">", ' type="' + type + '">') :
				html.replace(regex, 'type="' + type + '"') );
			tmp.data('type', x.data('type') );
			var events = x.data('events');
			var cb = function(events) {
				return function() {
					for(i in events)
					{
						var y = events[i];
						for(j in y)
							tmp.bind(i, y[j].handler);
					}
				}
			}(events);
			x.replaceWith(tmp);
			setTimeout(cb, 10);
			return tmp;
		}
	}
} );

Vous remarquerez au passage qu’il n’y a pas de champ de validation de mot de passe. J’utilise un autre technique qui consiste à pouvoir afficher le mot de passe si l’utilisateur souhaite le vérifier. Cette petite astuce à également besoin de javascript pour switcher le type de l’input entre password et text.

Afficher les erreurs

S’il y a une erreur lors de l’inscription, celle-ci est interceptée en php puis renvoyée sur le site par le biais d’une variable get nommée message.

Le code suivant sert à afficher pendant quelques secondes cette erreur à l’internaute. Tout d’abord on ajoute le message dans le footer :

add_action( 'wp_footer', 'show_user_registration_message' );
function show_user_registration_message() {
	if ( isset( $_GET['message'] ) ) {
		$wrapper = '<div class="message">%s</div>';
		switch ( $_GET['message'] ) {
			case 'already-registred':
				echo wp_sprintf( $wrapper, 'Un utilisateur possède la même adresse.' );
				break;
			case 'not-user':
				echo wp_sprintf( $wrapper, 'Votre inscription a échouée.' );
				break;
			case 'user-updated':
				echo wp_sprintf( $wrapper, 'Votre profil a été mis à jour.' );
				break;
			case 'need-email':
				echo wp_sprintf( $wrapper, 'Votre profil \'a pas été mis à jour. L\'email doit être renseignée.' );
				break;
			case 'email-exist':
				echo wp_sprintf( $wrapper, 'Votre profil \'a pas été mis à jour. L\'adresse email est déjà utilisée.' );
				break;
			case 'welcome':
				echo wp_sprintf( $wrapper, 'Votre compte a été créé. Vous allez recevoir un email de confirmation.' );
				break;
			default :
		}
	}
}

… puis on le style en css pour s’afficher en haut du site (à placer dans la feuille de style de votre thème) :

.message{
	position:fixed;
	top:20%;
	left:10%;
	width:80%;
	background-color:#FFF;
	color:#000;
	padding:1em;
	-webkit-box-sizing:border-box;
	-moz-box-sizing:border-box;
	box-sizing:border-box;
}

… puis enfin on le supprime au bout de quelques secondes :

jQuery( document ).ready( function($) {

	if ( $( '.message' ).length > 0 ) {
		setTimeout( function() {
			$( '.message' ).remove();
		}, 6000 );
	}

} );

Ce dernier javascript doit être collé dans un nouveau fichier de votre thème intitulé message.js, dans le repertoire js.

Empêcher les membres d’accéder à l’administration

Cette partie est facultative. Elle sert juste si l’on ne souhaite pas que nos abonnés puisse accéder aux pages de l’administration de WordPress (où il ont uniquement la possibilité de mettre à jour leurs information de profil).

Faire circuler l’utilisateur uniquement dans la partie publique du site renforce l’image de votre marque (il serait peut-être un peu perdu en passant dans l’administration). Si vous souhaitez contenir l’utilisateur uniquement en front-office, insérez ces quelques lignes dans functions.php :

//interdire l'accès aux non admins
add_action( 'current_screen', 'redirect_non_authorized_user' );
function redirect_non_authorized_user() {
	// Si t'es pas admin, tu vires
	if ( is_user_logged_in() && ! current_user_can( 'manage_options' ) ) {
		wp_redirect( home_url( '/' ) );
		exit();
	}
}

Édition du profil

Si vous avez bloqué l’accès à l’administration, et que vous voulez que vos abonnés puissent tout de même modifier leurs coordonnées, il faut alors rendre possible l’édition du profil en front.

Nous allons devoir créer une fonction, un peu dans le même esprit que le formulaire d’inscription.

function edit_user_form() {
	if ( is_user_logged_in() ) {
		$userdata = get_userdata( get_current_user_id() );
		echo '<form action="' . admin_url( 'admin-post.php?action=update_utilisateur' ) . '" method="post" id="update-utilisateur">';

		// Pseudo (ne peut pas être changé)
		echo '<p><label for="pseudo-user">Username</label>';
		echo '<input type="text" name="username" id="pseudo-user" value="' . $userdata->user_login . '" disabled></p>';

		// Nom
		echo '<p><label for="nom-user">Nom</label>';
		echo '<input type="text" name="nom" id="nom-user" value="' . $userdata->last_name . '"></p>';

		// Prénom
		echo '<p><label for="prenom-user">Prénom</label>';
		echo '<input type="text" name="prenom" id="prenom-user" value="' . $userdata->first_name . '"></p>';

		// Nom d'affichage
		echo '<p><label for="display_name-user">Nom d\'affichage</label>';
		echo '<input type="text" name="display_name" id="display_name-user" value="' . $userdata->display_name . '" required></p>';

		// Biographie
		echo '<p><label for="nom-user">Description</label>';
		echo '<textarea name="bio" id="bio-user">' . $userdata->user_description . '</textarea></p>';
		
		// Site
		echo '<p><label for="site-user">Site web</label>';
		echo '<input type="text" name="site" id="site-user" value="' . $userdata->user_url . '"></p>';

		// Email
		echo '<p><label for="email-user">Email</label>';
		echo '<input type="email" name="email" id="email-user" value="' . $userdata->user_email . '" required></p>';

		// Mot de passe (Mis à jour uniquement si présent)
		echo '<p><label for="pass-user">Mot de passe</label>';
		echo '<input type="password" name="pass" id="pass-user"><br>';
		echo '<input type="checkbox" id="show-password"><label for="show-password">Voir le mot de passe</label></p>';

		// Nonce
		wp_nonce_field( 'update-' . get_current_user_id(), 'user-front' );

		//Validation
		echo '<input type="submit" value="Mettre à jour">';

		echo '</form>';

		// Enqueue de scripts qui vont nous permettre de vérifier les champs
		wp_enqueue_script( 'inscription-front' );
	}
}

// Enregistrement de l'utilisateur
add_action( 'admin_post_update_utilisateur', 'update_utilisateur' );
function update_utilisateur() {
	// Vérifier le nonce
	if( isset( $_POST['user-front'] ) && wp_verify_nonce( $_POST['user-front'], 'update-' . get_current_user_id() ) ) {

		// Vérifier les champs requis
		if ( ! isset( $_POST['email'] ) || ! is_email( $_POST['email'] ) ) {
			wp_redirect( site_url( '/profile/?message=need-email' ) );
			exit();
		}

		// Si l'email change, alors on vérfie qu'elle n'est pas déjà utilisée
		if ( ( $emailuser = email_exists( $_POST['email'] ) ) && get_current_user_id() != $emailuser ) {
			wp_redirect( site_url( '/profile/?message=email-exist' ) );
			exit();
		}

		// Nouvelles valeurs
		$userdata = array(
		    'ID' => get_current_user_id(),
			'first_name' => sanitize_text_field( $_POST['prenom'] ),
			'last_name' => sanitize_text_field( $_POST['nom'] ),
			'display_name' => sanitize_text_field( $_POST['display_name'] ),
			'description' => esc_textarea( $_POST['bio'] ),
			'user_email' => sanitize_email( $_POST['email'] ),
			'user_url' => sanitize_url( $_POST['url'] ),
		);

		// On ne met à jour le mot de passe que si un nouveau à été renseigné
		if ( isset( $_POST['pass'] ) && ! empty( $_POST['pass'] ) ) {
			$userdata[ 'user_pass' ] = trim( $_POST['pass'] );
		}

		// Mise à jour de l'utilisateur
		wp_update_user( $userdata );

		// Redirection
		wp_redirect( site_url( '/profile/?message=user-updated' ) );
		exit();
	}
}

Il y a juste quelques petites subtilités :

Ici nous allons réutiliser le même javascript qu’à l’inscription (les fonctions sont identiques, autant les reprendre). Il suffit donc d’ajouter l’écouteur d’évènement sur l’id de ce nouveau formulaire, et s’assurer qu’il soit également enqueue dans la fonction.

	$( '#register-user, #update-utilisateur' ).on( 'submit', function(e) {

		$( this ).find( 'input:required' ).each( function() {

Restreindre l’accès à certains contenus

Pour l’instant nous avons créé un système permettant aux gens de s’abonner, de se connecter et de mettre à jour leur profil, côté site.

Il ne reste maintenant qu’à mettre des filtres sur différentes sections du site pour bloquer l’accès aux utilisateurs non-loggués.

Selon votre projet, vous aurez besoin d’utiliser une technique ou une autre, vous aurez rarement besoin de tout ça à la fois…

Tous ces codes sont à placer directement dans le fichier des fonctions du thème 🙂

Via un shortcode

Le shortcode permet d’insérer dans le contenus de vos pages ou de vos articles des sections, paragraphes, liens… réservées aux abonnés.

Voici quelques exemples d’utilisation :

Bref, je pense que vous vous faites déjà une idée des usages possibles…

Pour déclarer un nouveau shortcode, il faut utiliser le hook add_shortcode, et concevoir une fonction qui vérifie que l’utilisateur soit connecté. S’il ne l’est pas, le contenu privé sera substitué par un lien vers la page de connexion/inscription.

// Proposer un contenu uniques aux utilisateurs autorisés
add_shortcode( 'private-content', 'private_content' );
function private_content( $atts, $content ) {
	if ( is_user_logged_in() ) {
		return $content;
	} else {
		// Affiche un lien vers la page login de WordPress, 
		// puis redirige ensuite automatiquement vers la page précédente
		return '<a href="' . wp_login_url( get_permalink() ) . '">Connectez-vous pour lire ce contenu</a>';
	}
}

En fonction d’une page ou d’une rubrique

Il peut être aussi intéressant d’interdire complètement l’accès non-connecté à certaines sections du site. Les codes présentés dans cette section sont démonstratif, vous devrez les adapter en fonction de vos souhaits.

S’il ne sont pas connectés, les utilisateurs seront systématiquement renvoyés vers la page de login.

Pour bloquer l’accès, on se hook sur WordPress juste avant qu’il commence à envoyer les headers, sur le hook template_redirect. On peut utiliser tous les marqueurs conditionnels que l’on veut pour restreindre le contenu accessible.

Par exemple ici, j’utilise le template tag is_page() pour marquer la page d’id 5 comme privée ; si l’utilisateur n’est pas connecté (is_user_logged_in()), il sera alors redirigé (wp_redirect()).

// Vérouiller l'accès à une page
add_action( 'template_redirect', 'private_page' );
function private_page() {
	if ( is_page(5) && ! is_user_logged_in() ) {
		wp_redirect( wp_login_url( get_permalink(5) ) );
		exit();
	}
}

Selon un template

Si vous avez besoin que certaines pages soit réservés aux abonnés, et que celles-ci utilisent un template spécifique, rien de plus simple : il faut utiliser le marqueur is_page_template() en prenant en paramètre le nom du gabarit à exclure.

// Vérouiller l'accès à un type de page
add_action( 'template_redirect', 'private_type_of_page' );
function private_type_of_page() {
	if ( is_page_template( 'private-page.php' ) && ! is_user_logged_in() ) {
		wp_redirect( wp_login_url() );
		exit();
	}
}

Dans ces exemples, je redirige parfois vers la page login native de WordPress (via wp_login_url() ) et parfois vers une page de connexion personnalisée (home_url( ‘/login/’ ) )

Un site privé

Pour cela il faudra juste créer les pages de login et d’inscription (qui seront tout de même accessibles 🙂 ) puis appliquer un filtre sur tout le reste du site :

Du même coup, est-ce que les abonnés connectés ont besoin d’aller sur les page de login ou d’enregistrement ? Dans mon cas je ne pense pas, alors je les bloque…

// Vérouiller l'accès à tout le site
// Utiliser une page de connexion en front
add_action( 'template_redirect', 'private_website' );
function private_website() {
	//si l'utilisateur n'est pas connecté, l'envoyer vers la page de connexion
	if ( ! is_user_logged_in() && ! is_page( 'login' ) ) {
		// Page de login custom
		wp_redirect( home_url( '/login/' ) );
		exit();
	} 
	//interdire aux utilisateurs loggés d'aller sur la page de connexion
	elseif ( is_user_logged_in() && is_page( 'login' ) ) {
	    wp_redirect( home_url( '/' ) );
	    exit();
	}
}

Évolutions…

Nous avons fait le tour du système de base. Vous pouvez l’adapter pour créer votre espace privé sans utiliser de plugin (ou bien en en utilisant un peu, mais vous saurez comment ça fonctionne).

J’ai volontairement omis un grosse feature : rendre cet espace privé payant.

Ca faisait beaucoup pour un seul article, nous verrons ça la prochaine fois.
On approfondira par la même occasion le sujet des rôles utilisateur, pour faire la différence entre un abonné régulier, un n’ayant pas payé son accès, et un autre dont le compte est expiré.

Nous y aborderons également l’api de paypal, les capture de règlements (l’internaute entre ses coordonnées de paiement, mais n’est débité que lorsque l’administrateur valide le compte), et les paiement récurrents.

N’hésitez pas à me faire part de vos remarques 🙂

Contacter l'auteur :

willy bahuaud

Je suis Willy Bahuaud, développeurs de plugins et sites WordPress. Les extensions permettent d'étendre les fonctionnalités de WordPress au delà de ce que le cœur ou le thème ne le permettent. J'interviens donc régulièrement sur la conception de plugins (espaces membre, géolocalisation, annuaire…) pour le compte de mes clients.
Vous pouvez pour me faire part de vos projets.

63 commentaires

  1. Par Rémy — Il y a 2 années
    Bel article comme d’habitude !

    Peut-être que je l’ai manqué dans le code, mais ne faudrait-il pas modifier l’url retournée par wp_login_url(), pour qu’elle renvoie vers la page de login créée au début et non vers celle par défaut de WordPress ?

  2. Par Willy Bahuaud — Il y a 2 années
    Merci , en fait je n’ai peut-être pas passé assez de temps sur ce point, c’est vrai : j’ai mis les deux exemples sans les expliquer.

    En fonction de ce que l’on souhaite faire, on doit rediriger les internautes non connecté soit vers wp_login_url (si l’on a envie que les gens utilisent le form de connexion par défaut de WordPress), soit vers l’url de la page de connexion custom.

    Enfin la dernière possibilité, que tu sous-entends je crois, serait de filtrer l’URL retournée par wp_login_url par le biais du hook login_url. Je vais mettre à jour l’article dans ce sens je pense 🙂

  3. Par Daniel Roch — Il y a 2 années
    Comme le dit Rémy, voici encore un excellent article.
    J’ai hâte surtout de voir la suite avec l’intégration de cet espace membre avec un espace de paiement : cela va être terrible !
  4. Par Adri — Il y a 2 années
    Excellent article 😉

    Je ne faisais pas exactement comme toi pour faire des espaces membres car je mettais des restrictions directement dans mon template privé. Mais c’est bien de voir d’autres façons de faire, surtout avec le hook « template_redirect » qui est magique !

    Et par la même occasion si tu vas dans le sens du paiement Paypal pour avoir un accès à l’espace privé limité dans le temps, il serait bien de trouver une solution pour attribuer un contenu (texte, pdf, images…) spécifique à un utilisateur. Il retrouverait ce contenu exclusif dans son profil et les autres membres ne le verraient pas. Ce serait donc par exemple la création d’un CPT ou l’on pourrait choisir via une liste déroulante à quel utilisateur ce contenu est destiné. Il y a déja le plugin « User Specific Content » mais si tu as une solution plus simple à mettre en place ça peut être sympa de la partager 😉

    Bonne journée !

  5. Par nicodesh — Il y a 2 années
    Super article ! Merci beaucoup.

    Il y a seulement un petit truc que je n’ai pas compris :

    Section « Vérouiller l’accès à une page » :

    wp_redirect( wp_login_url( get_permalink(5) ) );

    Je n’ai pas compris pourquoi devait-on mettre le permalink du Post en argument de wp_login_url ?

  6. Par Seb — Il y a 2 années
    Bonjour et merci, je trouve ça clair et bien fait. Quelques questions :
    – peut-on afficher les profils des personnes de cette façon : un profil = un article ?
    – peut-on envisager simplment de créer des profils de différents niveaux avec pour certains un compte validé par un paiement par paypal ?
  7. Par Willy Bahuaud — Il y a 2 années
    Merci l’ami ! Moi aussi j’ai hâte de sortir la suite ^^… et merci encore pour la relecture !

    Merci,
    se hooker sur template_redirect c’est bien pratique oui 🙂 Ça permet de tout gérer à un seul endroit, dans la même ligne de condition bien souvent…

    En ce qui concerne le contenu spécifique par utilisateur, peut-être pourrais-je l’aborder au prochain article, je vais y réfléchir.

    Merci,
    C’est vrai que je n’ai pas été très clair sur ce point : en gros si vous préférer utiliser l’espace de login par défaut de WordPress, alors la fonction wp_login_url() renverra vers la page de connexion. Cette fonction peut prendre un argument : l’url à laquelle sera redirigé l’utilisateur une fois connecté.

    Ca évite de faire comme sur certains sites, où une fois connecté tu dois partir à la recherche de l’article sur lequel tu avais cliqué et que tu souhaitait lire. Là tu y es redirigé directement.

    Merci,
    Les réponses à tes questions se trouvent dans le prochain article ^^ (et bien sûr, on peut)

  8. Par Seb — Il y a 2 années
    juste énorme !!! Merci beaucoup 🙂 (et trop impatient)
  9. Par QuarkSEO (Nic'O) — Il y a 2 années
    Article vraiment intéressant permettant de partir sur une base saine et éprouvé, exit le bricolage en avançant au taton.

    Dans le prolongement de tes articles, aurez tu des thèmes HTML/WP qui se prêterait bien à des fiches de profil, compte membre etc.. ?

    Merci

  10. Par Julio Potier — Il y a 2 années
    Encore un (des) article qui va devenir une référence, j’ai hâte de voir les autres. Peu de code, et tout fonctionne, bravo !
  11. Par lipaonline — Il y a 2 années
    Très bon article, j’en avais fait un beaucoup plus basic, car la partie « register » ne m’était pas nécessaire…
    Par contre, j’ajouterai un suppression de la barre admin avec un hook « show_admin_bar »-> false , non ?

  12. Par Julien Maury — Il y a 2 années
    Coucou,

    Attention aux erreurs classiques : ne pas appliquer la redirection sur la page en question donc dans ton exemple éviter la page « login » l’exclure de la condition sinon ça va boucler !

    Petite coquille sur tous les add_action c’est une virgule à la fin au lieu d’un point-virgule.

    Sinon bonne base.
    A +

  13. Par Willy Bahuaud — Il y a 2 années
    Oui tout a fait, c’est rectifié 🙂

    A+

  14. Par nicodesh — Il y a 2 années
    Okay ! Merci de ta réponse 🙂
  15. Par QuarkSEO (Nic'O) — Il y a 2 années
    Je suis entrain de le mettre en application et j’avais quelques questions.
    Tout d’abord, je souhaite m’affranchir du formatage HTML de base du wp_login_form(), j’ai donc réaliser le code HTML en brut en me basant sur tes infos et le code html généré sur wp-login.php. Dans ce sens, j’ai vu que tu déclares user-login et user-pass en ID, sur l’officiel c’est avec un _(underscore), je ne sais pas si cela a son importance, et si le html doit comporter des subtilités (champs hidden, etc..) ?

    Autre question, je vois donc que cela envoie vers wp-login.php, qui doit surement très bien faire son travail quand les infos sont bonnes, mais si on remplis rien ou que l’on a des erreurs, cela nous laisse sur le wp-login.php d’origine avec son template WP. Peut ton rediriger si erreur vers notre custom login et également afficher les erreurs comme sur l’officiel ?

    Merci

  16. Par Willy Bahuaud — Il y a 2 années
    Tes questions sont très pertinentes 🙂
    Tu peux complètement t’affranchir de wp_login_form si tu le souhaites (y’a juste un champ input:hidden[name= »redirect_to »] à ne pas oublier si tu souhaites rediriger au login). Pour les IDs des champs, il n’ont aucune importance, ce sont les names qui compte.

    Pour rediriger vers une page custom en cas d’erreur, il existe un hook sur lequel tu peux te greffer pour faire une redirection : wp_login_failed. Tu peux l’utiliser pour renvoyer à la page de connexion (et l’erreur sera visible en $_GET).

    Par contre si on a omis de remplir un champ il faudra utiliser cette astuce pour dire qu’un champ vide est une erreur…

  17. Par QuarkSEO (Nic'O) — Il y a 2 années
    merci de ton retour, ca me (nous ?) permets de personnaliser un peu plus.

    Par contre pour la redirection, quand je regarde un peu les codes fournis à gauche à droite pour ce hook, je vois qu’ils rajoutent tous « ?login=failed », c’est un bon début, mais pour mon coté perfectionniste j’aurai avoir toute une panoplie d’erreurs possibles ( mot de passe correspond pas à cet email, …) tel que l’on peut le voir sur wp-login.php de base.
    Quand je teste sur l’original, pas de params GET à l’horizon, tout est en POST (enfin je pense), peut on récupérer ces erreurs là (dans wp_login_failed) permettant sur notre custom login de recréer la copie conforme ?

    Désolé d’aller toujours plus dans le détail, mais c’est pour essayer d’aller dans la même veine que l’original.. une sorte de continuité …

    Merci encore.

  18. Par Willy Bahuaud — Il y a 2 années
    ne soit pas désolé, c’est très intéressant ^^
    Je n’ai pas testé donc je répond un peu dans le flou : je ne pense pas que l’on puisse avoir plus d’informations via wp_login_failed. Tu peux regarder la fonction wp_authenticate pour comprendre si tu veux : http://svn.automattic.com/wordpress/tags/3.8/wp-includes/pluggable.php

    Mais quelles sont les erreurs possibles ? Ca ne peut être qu’un problème de mot de passe ou d’username non ? (et a t’on intérêt à préciser le champ qui pose problème ? Pas sûr ^^). Moi je redirigerai simplement en disant : « Il y a une erreur de login ou de mot de passe. Essayez à nouveau ou cliquer ici pour renouveler votre mot de passe. »

    En creusant davantage, il y a peut être un autre possibilité : faire la redirection directement dans le hook login_redirect.
    À la base il n’est pas faire pour ça (c’est un filtre) mais il prend en 3ème paramètre la variable $user avec laquelle on peut obtenir le détail des erreurs (WP_User si ok, WP_error sinon). Donc s’il y a une erreur, tu peux éventuellement l’attraper ici et rediriger directement 😉

    Je pense mettre à jour cet article avec les nombreuses remarques que j’ai eu en commentaire. Pour qu’il soit complet.

  19. Par Grégoire Noyelle — Il y a 2 années
    Merci Willy.
    Très bon article. Une référence comme dit Julio.
    J’ai toujours, jusqu’à présent ,couplé le add on de Gravity Forms (Register Member) avec le Plugin Members de Justin Tadlocks. Mais parfois on a pas exactement ce que l’on veut. Ton article me motive pour aller plus loin 🙂
  20. Par QuarkSEO (Nic'O) — Il y a 2 années
    Une idée de date de sortie de la suite de ce tutoriel ? 🙂 #impatient
  21. Par Benjamin — Il y a 2 années
    Excellent article que j’applique en ce moment même !
    J’aurai juste mis les textes « en dur » dans des chaines traduisibles 😉
  22. Par Willy Bahuaud — Il y a 2 années
    Oui bien sur, il faut le faire si tu souhaites un site multilingue. Je ne l’ai pas fait dans les démos pour ne pas alourdir le code, et montrer juste l’essentiel.
    Mais tu as raison oui ^^
  23. Par ApocaTeam's Studio® — Il y a 2 années
    Bonsoir,

    Alors j’ai un problème, je précise d’abord que je suis débutant avec ce CMS, mais j’ai un problème. Alors, je n’ai que le formulaire de connexion qui est visible, le formulaire d’inscription ainsi que le contenue de la page de modification de profil sont inexistants chez moi.

  24. Par Geoffrey — Il y a 2 années
    Hello Willy !

    Merci pour ton article !
    Ne trouvant pas ce que je voulais au niveau des plugins existant (trop fournis, pas assez, mal codés, etc.) je me suis dit que j’allais suivre tes recommandations pour voir le résultat final en live sur mon petit projet perso.
    J’ai adapté plein de choses pour coller à mes besoins, et je n’en suis qu’au début encore, mais voici mes humbles retours jusqu’ici :

    ► tu peux facilement adapter ton code pour charger ton fichiers message.js que quand il y en a besoin (perso j’ai mis tous les JS dans le même fichier, mais c’est une autre histoire). D’ailleurs tu charges ce fichier uniquement pour quelques lignes de JS, ce n’est pas très optimal.

    ► ta solution pour changer l’attribut d’un champs password avec jQuery ne peux pas fonctionner et retourne l’erreur suivante :

    Error: type property can't be changed

    Je suis resté bloqué un moment quand j’ai voulu réaliser ça il y a quelques temps, voici ma solution : http://codepen.io/CreativeJuiz/pen/cvyEi?editors=001

    ► Certains des éléments que tu proposes dans le markup, stylés avec CSS, demandent l’activation de JS pour fonctionner réellement. Quelques adaptations de ton code permettraient d’avoir une bonne interface même sans JS. (messages d’erreurs, afficher/cacher le mot de passe, etc.)

    Je ne suis pas encore passé à la partie édition du contenu et la suite de l’article. J’implémente des choses au fur et à mesure.

    Encore merci à toi pour ton travail.
    Au plaisir de te lire.

  25. Par Net Connect — Il y a 2 années
    Un super article qui va me servir.

    Cependant j’ai une petite question : il n’y a pas de vérification php sur les données rentrés lors de l’inscription d’un membre ? (question de sécurité)

    J’ai peut-être loupé quelque chose ?

  26. Par Willy Bahuaud — Il y a 2 années
    Si bien sûr ! Mais nous n’avons pas à nous en charger ; le nettoyage des chaines se fait dans les fonctions wp_create_user() et wp_update_user() 🙂

    WordPress fait déjà le travail…

  27. Par Quentin Mauret — Il y a 2 années
    Merci, super article, très bien expliqué. J’attends la suite avec impatience 🙂
  28. Par Seb — Il y a 2 années
    Très bon article !! moi aussi impatient de lire la suite !! Vite, vite !! 😉 Merci bcp
  29. Par Marie — Il y a 2 années
    Bonjour,
    Super article merci.

    J’ai quand même un petit soucis, que je n’arrive pas à résoudre.
    J’utilise la fonction suivante pour empêcher les non-membres d’accéder à certaines pages :

    
    add_action( 'template_redirect', 'private_page' );
    function private_page() {
    	if ( is_category('11') && ! is_user_logged_in() ) {
    		wp_redirect( (home_url( '/espace-connexion/' ) ) );
    		exit();
    		
    		}	
    		
    	
    		
    
    	elseif ( in_category('11')  && ! is_user_logged_in() ) {
    		wp_redirect( (home_url( '/espace-connexion/' ) ) );
    		exit();
    		}
    
    	
    }
    

    … le problème c’est que lorsque j’utilise la deuxième fonction (in_category), ca bloque aussi la page d’accueil qui ne contient pourtant pas d’article de la catégorie 11. Est-ce qu’il existe un moyen d’autoriser systématiquement l’accès à la page d’accueil, ou est ce que j’aurais écrit ma fonction n’importe comment ? (je ne suis pas une pro du PHP).

    Merci

  30. Par Guillaume — Il y a 2 années
    Bonjour,
    Je suis intéressé par le fait d’avoir une partie reservé aux adhérents.
    Par manque de temps, j’ai utilisé des plug in mais à chaque fois, je ne suis pas satisfait. J’ai un bon niveau dans le code. J’ai une liste de contacts, d’adhérents. Je ne veux pas qu’ils s’inscrivent directement, ils font partie de l’asso, ils ont pas à se réinscrire.
    Mais, je veux aussi avoir la possibilité d’en ajouter sans envoi massif comme pour la création de ma base. Dans tous les cas, j’aimerai bien un envoi de mail personnalisé avec un mot de passe généré pour l’occase.
    J’ai plus de 600 noms à entrer.
    Ils auraient le même statut à savoir lecteur de contenu.

    J’utilise le plug’in Member access pour faire la distinction entre les articles privés de publics, il me reste juste à savoir comment je fais pour ajouter cette dernière partie pour qu’ils puissent tous se connecter.

  31. Par Geoffrey — Il y a 2 années
    Hey Mister !

    Je reviens d’une longue période sans avoir touché au code que je travaillais lorsque j’ai laissé mon précédent commentaire.
    J’avais une belle page blanche en essayant une partie de ton code, mais comme je l’ai pas mal adapté je pensais que ça venait de mon code (enfin, de mon code complémentaire).
    En fait non, on a fait la même erreur :
    Ligne 72 du code de « édition du profil », c’est « ID » et non « id ».

    Le seul truc en majuscules =_=
    Ce sont des coquinous !

    En tout cas ton article me sert beaucoup, j’ai piqué plein de bouts de code codés plus intelligemment que les miens 😉

    Bonne continuation à toi et merci.

  32. Par adeline — Il y a 2 années
    Merci pour cet article! 🙂 J’ai e
    une petite question comment l’administrateur du site est averti qu’un internaute s’inscrit ?? Merci d’avance pour vos réponses
  33. Par Darknote — Il y a 2 années
    Merci pour cet article, était-il possible de faire que tous les utilisateurs, ont dans les identifiants le nom du site?
    par exemple wabeo.fr-darknote
    Merci
  34. Par madvic — Il y a 2 années
    : j’ai eu ce besoin il y a peu.
    j’ai trouvé le plugin WP-Activity (https://wordpress.org/plugins/wp-activity/) mais celui là n’est pas maintenu et non compatible php5.4.
    J’ai commencé à le forker : carte-de-voeux.cybercartes.com
    Tous les bug ne sont pas résolue mais c’est déjà ca. Après si tu trouve mieux, fais le moi savoir 😉
  35. Par Willy Bahuaud — Il y a 2 années
    Alors il faut différencier deux types de notifications : la notification envoyé à l’utilisateur (via la fonction wp_new_user_notification() ) et la notification à l’administrateur, qui peut passer par un simple wp_mail() au même endroit, juste après que l’on ai assigné le rôle subscriber 🙂
  36. Par Lionel — Il y a 2 années
    Bonjour Willy,

    alors voila je suis en pleine création de mon site internet et en cherchant comment inserér un plugin pour un espace menbre je suis tomber sur ton article (merci google 🙂 ) donc voila pour mon site je passe par OVH directement grace au module wordpress.

    Ma question : je ne trouve pas ou configurer c’est ligne de code sur mon interface :/. Pense tu que sa me serait plus simple d’utiliser un plugin ? Si oui peut tu me dire lequel car j’ai tester 2 plugin mais impossible de les faire fonctionner.

    Je te remerci pour ton article et j’espere que tu pourra m’aider dans mes recherche.

    Lionel

  37. Par languile11 — Il y a 2 années
    Merci beaucoup pour votre temps. Ce tutoriel m’a beaucoup aidé
  38. Par Petipotamtam — Il y a 2 années
    Bonjour,
    J’avance peu à peu sur ce tuto, par contre je ne vois pas où placer le code de l’Édition du profil ?
    dans un ficher à part ou il faut le copier/coller dans le user-edit de wp-admin de wordpress ?
    en tout cas merci beaucoup pour votre travail sur ces tutos 🙂
  39. Par Karim — Il y a 2 années
    Bonjour est il possible d’avoir une vidéo complète car je souhaiterais avoir cet espace sur mon site http://sdk-marseille.com/ car je suis un débutant en informatique.
    Merci d’avance
  40. Par Lucax — Il y a 2 années
    Salut merci pour ce tuto vraiment pratique. J’ai remarqué un comportement un peut spécial sur l’edition du profile quand j’ai copier/coller la fonction dans fonctions.php et que j’apelle ma fonction elle apparait bien au départ j’avais bien le site web qui apparaissé dans l’input maintenant la case reste vide et rien n’apparait j’ai beau copié collé ton code telle qu’elle à nouveau. Serait tu d’ou viens ce problème ?
  41. Par emy — Il y a 2 années
    bonsoir
    merci pour votre article 🙂
    j’ai juste un petit problème .je suis débutante en wordpress et je suis entrain de faire un site pour mon client et il veux un espace membre pour ajouter ces produits,moi j’utilise une extension « product catalogue « mais on peut ajouter les produits que on tant que administrateur qu’est ce que je peut faire?
    merci beaucoup
  42. Par Cécile — Il y a 1 année
    Bonjour,

    Merci pour ce « tuto » très compréhensible, un régal !

    Je me pose des questions sur les mises à jour : wp évolue, alors le code que tu proposes doit-il du coup évoluer en conséquence ?

    Merci pour ton retour.

  43. Par Anthony — Il y a 1 année
    Bonjour ,

    Je souhaite savoir comment intégrer et modifier ces codes ?
    Je suis débutant en programmation donc j’ai pas tous compris…

  44. Par Willy Bahuaud — Il y a 1 année
    Pour chaque code j’ai essayé de préciser où l’insérer. Les différents endroits sont :

    • le fichier functions.php du thème.
      Il suffit de te connecter en FTP à ton hébergement, puis de naviguer dans /wp-content/themes/tontheme/ pour trouver ce fameux fichier. Ensuite il faut l’éditer (avec éditeur de code, tel que sublime text) pour rajouter ces lignes à la fin
    • le template correspondant.
      Je fais référence aux fichiers qui font ton thème, et qui se trouvent au même endroit que le fichier des fonctions. Si tu souhaites savoir quel template modifier, je t’invite à consulter la template hierarchy.
  45. Par thibo — Il y a 1 année
    Bonsoir Anthony ,

    Merci pour tout tes bons conseils, mon associée et moi venons vers toi , novices sur wordpress et utilisateurs du theme A1 , nous avons suivi ta procedure pour l’integration d’un login pour espace membre sur notre site , mais impossible de faire fonctionner celui ci.
    Nous nous sommes connectes sur notre FTP dans le theme par defaut Tweny fiftheen , avons fait un duplicata et integrer nos codes , mais rien y fait malheureusement . Aurais tu un conseil ou une autre solution.
    Un grand merci pour ta precieuse aide .

  46. Par Damien — Il y a 1 année
    Bonjour,
    Voila exactement ce que je désirais mettre en place dans mon site WordPress. Est-ce quelqu’un a déjà transformé ce code en plugin ?
    Je l’aurais bien fait, mais si je suis capable de comprendre (ingé en informatique depuis 1989), ça fait longtemps que je n’ai pas codé (j’ai créé mon dernier site en html/php/mysql en en 1999). Par ailleurs, j’aimerai pouvoir le réinstaller sans fatigue si je change de thème.
    Bref, si Willy ou quelqu’un d’autre a déjà fait un plugin de ce thème, je suis preneur.
    Merci
    Damien
  47. Par Willy Bahuaud — Il y a 1 année
    Non , je n’ai pas transformé ce code en plugin. À mon avis il est nécessaire de l’adapter à chaque projet. Dans l’absolu on pourrait, mais cela deviendrait une usine à gaz. Ce n’est pas mon but 🙂
    Par contre tu peux en faire un plugin « maison », que tu pourras conserver même si tu change de thème.
  48. Par Thomas — Il y a 1 année
    Hello, merci pour ce tuto très intéressant !
    Je débute avec WordPress, je suis en train de construire un espace adhérent sur le site d’une association, en dur (base MySql + inclusions de pages php codées hors WP) et je me demandais s’il est possible, en utilisant votre méthode, d’associer des données à ces utilisateurs (ex: inscription dans un planning, montant des frais à régler…) comme on pourrait le faire avec une BDD.
    Merci d’avance !
    Thomas
  49. Par Charles — Il y a 1 année
    Hello, je viens juste pour préciser dans le inscription.js

    changetype( $( ‘#pass-user’ ), ‘text’ );
    changetype( $( ‘#pass-user’ ), ‘password’ );
    a changer en :
    changeType( $( ‘#pass-user’ ), ‘text’ );
    changeType( $( ‘#pass-user’ ), ‘password’ );

  50. Par fabrice — Il y a 1 année
    BONJOUR,
    Vraiment super, simple,pratique et génial car je fait actuellement mon site et je veux utiliser le moins de plugins possible et à force de recherche je suis tomber sur ton site qui est superbe ou j’ espère un jour pouvoir faire autant. bref

    ceci dit, j’ai crée mon thème personnalisé par le biais de divers formations et j’utilise donc la tienne pour créer un espace membre et je suis bloquer a la création d’un membre.

    Je bloque donc a cet page qui reste blache – le White Screen of Death (WSOD) :
    admin-post.php?action=nouvel_utilisateur

    pourtant que je passe en GET je vois bien l’envoie du nouvel utilisateur dans l’ url

    après quelques bidouillage j’ai ce message a la même page
    admin-post.php?action=nouvel_utilisateur :
    You must log in to access the admin area.

    je pense que j’ai fait une erreur au niveau du JavaScript ou de la page ou l’on écrit le script, pourtant j’ai vérifier, même fait du copier-coller pour être sur, mais rien n’y fait.

    j’ai parcouru tous les commentaires et je n’ai rien lu à ce sujet.

    Aurais-tu une idée ou peux-tu me dire sue quelle page faut-il écrire le code, car je ne comprends pas trop la page inscription-2.js alors que l’on la déclare n’y dans la page functions n’y dans le header.

    merci

  51. Par fabrice — Il y a 1 année
    salut,

    j’ai poster un commentaire il y a quelques jours.
    juste pour te dire que c’était un plugins qui parasitait l’ inscription.

    par contre comment je peu faire pour afficher une page avec du contenu différent par membre.

    ex : je ne veux pas que Mr X est la même chose que Mr Y.

    merci

  52. Par Antony — Il y a 1 année
    Bonjour et merci pour ce super tuto!!! En poussant plus loin, pensez vous qu’il est possible de créer une page de connexion style instagram ou facebook? c’est à dire que l’utilisateur doit se connecter ou s’inscrire afin d’avoir accès au site entièrement. (je suis designer, le html/css, c’est ok mais php, pas encore à niveau malheureusement) j’ai trouvé le plugin « private only » qui fonctionne très bien mais pour personnaliser la page de connexion (mis à part changer le logo wordpress, c’est pas super). En vous remerciant.
    Antony
  53. Par nico — Il y a 1 année
    Bonjour,

    j’ai utilisé votre script d’inscription mais quand on s’inscris on est redirigé vers une page banche.. tu sais d’ou viens l’erreur ? 🙂

  54. Par Maxime — Il y a 1 année
    Dans le functions.php je rajouterai bien ceci pour que la wpadminBar ne soit pas visible :

    if (!current_user_can(‘manage_options’)) {

    add_filter(‘show_admin_bar’, ‘__return_false’); // intervient sur le filtre show_admin_bar et retourne false

    }

  55. Par Willy Bahuaud — Il y a 1 année
    En fait le mieux est encore afficher (ou non) l’adminbar en fonction du rôle ou des permissions de l’utilisateur. Par exemple il est intéressant pour l’admin de conserver l’adminbar…
  56. Par Max — Il y a 1 année
    Bonjour,
    Super article, très bien expliqué. Je hâte de lire les prochaines étapes pour la partie payante avec Paypal…
    Bonne continuation.
  57. Par Bill — Il y a 1 année
    Bonjour à Tous,
    J’ai testé sur super Tuto, et je remercie Willy pour ce beau travail.
    Par contre, j’ai un petit souci :
    Inscription OK,
    Mais au niveau de l’update du profil et à la page privé du user, ça ne marche pas chez moi.
    Je tente de créer des pages privées pour chacun de mes users et ça ne marche pas.
    Comment je peux faire, pour que chaque abonné ait sa page privée.

    Merci pour votre aide.

  58. Par Mary — Il y a 1 année
    Bonjour,

    Super article qui m’est très utile ! Merci !
    Je suis débutante avec ce CMS et également en PHP.
    J’ai peut-être loupé quelque chose dans l’article, mais je ne vois pas où est la page pour éditer le profil. Une fois les codes installés, je ne vois pas quelle est ma page pour faire la modification d’information (mot de passe, etc.) car c’est ça qui m’intéresse.

    Désolée si j’ai loupé l’information alors qu’elle est donnée.
    Merci d’avance pour la réponse et bonne continuation !

  59. Par thibault — Il y a 1 année
    Bonjour je voudrais savoir si il est possible d’afficher un profil different selon le role du membre qu’il aura choisi a l’inscription ?
  60. Par Wendy — Il y a 1 année
    Bonjour,
    Super votre tuto ! Mais j’ai une question;
    Est-il possible d’ajouter des champs spécifiques lors de la création d’un utilisateur ? Par exemple le nom de l’entreprise de l’utilisateur. J’ai vu énormément de choses sur le net mais je suis un peu perdue, notamment la façon dont ça se passe dans la base de données WordPress.. 😀
    Wendy
  61. Par Adrien — Il y a 1 année
    Bonjour,
    Je suis tombé sur votre site qui est très intéressant et qui va m’aider sur un projet en cours.

    J’ai deux questions : cet article concerne quelle version de WordPress ?

    Pouvez vous me dire quand allez vous publier la suite pour rendre cet accès payant ?

    Merci de votre Aide

  62. Par Willy Bahuaud — Il y a 1 année
    Cet article est valide pour les versions à partir de la 3.1, il me semble.

    Oui c’est tout à fait possible, il faut stocker ces informations dans la table des meta données d’utilisateurs, via la fonction update_user_meta()

    Oui tu peux faire une condition sur le rôle de l’utilisateur, ou mieux : ses capabilities, via la fonction current_user_can()

    je n’ai fait que lister les fonctions ici, à toi de les appeler dans un template, ou via le biais d’un shortcode (tu peux utiliser la fonction add_shortcode() pour créer un shortcode)

    il ne s’agit pas d’une page privée, simplement d’une page publique dont le contenu est dynamique et s’adapte à l’utilisateur. Après tu peux évidement créer des pages pour chaque utilisateur, et tester si l’utilisateur est autorisé à consulter la page avant de l’afficher.

  63. Par Maglott — Il y a 11 mois
    Bonjour !

    Vos articles sont très intéressants, merci pour cette mine d’informations !

    J’ai actuellement une problématique concernant des niveaux d’accès de l’intranet WPOffice.
    Est-il possible qu’un membre ne puisse pas voir tous les autres membres inscrit sur l’intranet en admin, mais que certains utilisateurs en particulier ?
    Ex : En administration, un utilisateur qui sera en fait un club de sport, n’aura accès qu’aux infos des utilisateurs ayant renseigné le nom du club en question dans le champ personnalisé de son profil BuddyPress.

    C’est en fait l’intranet d’une fédération sportive française, et nous souhaiterions que chaque club puisse voir uniquement les infos de ses adhérents, et non des adhérents des clubs de la France entière.

    Je planche depuis un certain temps sur ce souci là, mais je n’y vois pas de solution !

    Merci pour votre retour,

    A bientôt,

    Sandra

Commenter