Bonjour à tous !
Je me tourne de nouveau vers vous aujourd'hui, car je ne m'en sors plus.
J'ai suivi le tuto GrafikArt, mais tout ne fonctionne pas comme je le souhaiterai, je m'explique :
1- J'ai créé un fichier tpl-login.php fonctionnel. Je souhaiterai juste que, lors d'une connexion réussie, le formulaire soit caché et un message de type :"Connexion réussie, vous allez être redirigé vers l'accueil dans un instant", puis après cet "instant" ( disons 2 secondes ), la page soit redirigée vers home.
Pour commencer cette étape, j'ai ajouté ceci :
if($user->ID != 0){
wp_redirect( home_url() );
exit;
}
Mais, au risque de me prendre pour un imbécile, ça ne fonctionne <u>que</u> si je clic 2 fois...
2- Pour le tpl-register.php, c'est pire je crois. L'inscription fonctionne, mais le compte est innaxessible :
Il envoie un mail de confirmation, et apparemment, tant que ce mail n'est pas confirmé, il est impossible de se connecter au compte.
Sauf que le mail n'arrive jamais ( celui de récupération de mot de passe lui par contre fonctionne... ) et que du coup, la fonction wp_signon($_POST); ne sert à rien, j'ai donc bidouillé un truc pour renvoyer vers la page login après l'inscription.
Ici pareil, pas de message de confirmation lorsque l'inscription a bien été enregistrée.
ci-dessous, le code source des pages.
Le tpl-register.php
$error = false;
if(!empty($_POST)){
$d = $_POST;
if($d'user_password'] != $d'user_password2']){
$error = '<p style="color:red;"><strong>Erreur</strong>, les mots de passe ne correspondent pas</p>';
}else{
if(!is_email($d'user_email'])){
$error = 'Veuillez entrer un email valide';
} else {
$user = wp_insert_user ( array(
'user_login' => $d'user_login'],
'user_pass' => $d'user_pass'],
'user_email' => $d'user_email'],
'user_registered' => date('Y-m-d H:i:s')
));
if(is_wp_error($user)){
$error = $user->get_error_message();
}else{
$msg = 'Votre inscription blablabla';
$headers = 'From: '.get_option('admin_email'). "\r\n";
wp_mail($d'user_mail'], 'Titre', $msg, $headers );
$d = array();
header('location:login');
}
}
}
}
?>
<?php get_header(); ?>
<div id="container">
<section id="content">
<div id="register-content">
<h1>S'enregistrer</h1>
<form name="registerform" action="<?php echo $_SERVER'REQUEST_URI']; ?>" method="post">
<fieldset class="inputs">
<?php if ($error): ?>
<p class="error"><?php echo $error; ?></p>
<?php endif ?>
<p style="text-align:left; margin-bottom:3px;">Identifiant</p>
<input type="text" name="user_login" value="<?php echo isset($d'user_login']) ? $d'user_login'] : ''; ?>" />
<p style=" text-align:left; margin-bottom:3px;">Mot de passe</p>
<input type="password" name="user_password" id="pwd" size="20">
<p style=" text-align:left; margin-bottom:3px;">Confirmer le mot de passe</p>
<input type="password" name="user_password2" id="pwd" size="20">
<p style="text-align:left; margin-bottom:3px;">E-mail</p>
<input type="text" name="user_email" value="<?php echo isset($d'user_email']) ? $d'user_email'] : ''; ?>" />
</fieldset>
<br>
<fieldset class="actions">
<input type="submit" name="wp-submit" value="s'enregistrer" class="submit2"/>
</fieldset>
</form>
</div>
</section><!-- #content -->
<?php get_sidebar(); ?>
</div><!-- #container-->
<div class="clear"></div>
<?php get_footer(); ?>
le tpl-login.php
$error = false;
if(!empty($_POST)){
$user = wp_signon($_POST);
if(is_wp_error($user)){
$error = $user->get_error_message();
}
}
$user = wp_get_current_user();
if($user->ID != 0){
wp_redirect( home_url() );
exit;
}
?>
<?php get_header(); ?>
<div id="container">
<section id="content">
<div id="login-content">
<h1>Se connecter</h1>
<?php if ($error): ?>
<div class="error">
<?php echo $error; ?>
</div>
<?php endif ?>
<form name="loginform" action="<?php echo $_SERVER'REQUEST_URI']; ?>" method="post">
<fieldset class="inputs">
<p style=" text-align:left; margin-bottom:3px;">Mon identifiant</p>
<input type="text" name="user_login" id="log" value="" size="20">
<p style=" text-align:left; margin-bottom:3px;">Mon Mot de passe</p>
<input type="password" name="user_password" id="pwd" size="20">
</fieldset>
<fieldset class="actions">
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER'REQUEST_URI']; ?>">
<input type="submit" name="submit" value="Connexion" class="submit2">
<label style=" width:150px;">
<input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever">Se souvenir de moi
</label>
</fieldset>
</form>
<br>
<p style="text-align:center; margin-bottom:5px;">
<strong>Mot de passe perdu ?</strong>
<a href="http://localhost/***/wp-login.php?action=lostpassword">Cliquez ici</a>
</p>
</div>
</section><!-- #content -->
<?php get_sidebar(); ?>
</div><!-- #container-->
<div class="clear"></div>
<?php get_footer(); ?>
Et pour finir le add_action :
add_action( 'send_headers','site_router');
function site_router() {
$root = str_replace('index.php', '', $_SERVER'SCRIPT_NAME']);
$url = str_replace($root , '', $_SERVER'REQUEST_URI']);
$url = explode('/',$url);
if(count($url) == 1 && $url[0] == 'login') {
require 'tpl-login.php';
die();
}
if(count($url) == 1 && $url[0] == 'register') {
require 'tpl-register.php';
die();
}
}
Je sais, c'est long à lire, mes connaissances en php sont limitées ( en tout cas, limitées aux tutos en ligne, surtout ceux de grafikart ), mais je googelise ça depuis hier, je n'en peux plus. Entre le mot de passe qui est envoyé par mail à l'inscription, le mail qui n'arrive jamais ( malgré un plugin pour le faire en local ), le signon qui marche pas, la redirection...
Je suis paumé...
Merci d'avance à tous, et bonnes fêtes de fin d'année !
Bon et bien, après des heures et des heures de recherche, je dois m'avouer vaincu et changer de méthode.
J'opte donc à contre gré pour un plugin, Theme My Login, qui ma foi est plutôt pas mal foutu, même si je dois fouiller un peu pour changer qq trucs ( préférences perso... )
Merci quand même.
Bonjour, je suis conscient que votre sujet est ancien mais j'ai suivi le même tutoriel que vous mais je n'arrive pas à accéder aux pages lorsque je tape comme url "http://localhost/login". J'obtiens une erreur 404 Not Found. Pourriez-vous me dire comment vous avez fait ?
Bonsoir,
Comme indiqué dans la réponse, j'ai opté pour un plugin.
Bon, comme j'ai terminé le projet depuis pas mal de temps, j'avoue ne même plus me souvenir de ce que j'ai fait après, puisque j'ai encore modifié des trucs.
Le plugin est : "Theme my login".
Cdt,