Salut,
J'ai suivis le tuto "Inscription et Connexion personnalisée", ma page login fonctionne quand je me log j'attéris sur la page profil.
La meta âge sur la page profil fonctionne et se met aussi à jour sans probléme. Par contre je n'arrive pas à avoir les liens se connecter, déconnection et mon profil dans mon header. Je met le code mais je ne pense pas qu'il comport d'erreur j'ai vérifié plusieur fois.
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<a class="brand navbar-brand" href="<?php echo site_url(); ?>"><?php bloginfo( 'name' ); ?></a>
</div>
<div id="navbar" class="navbar navbar-nav">
<nav id="site-navigation" class="navigation main-navigation navbarnav nav" role="navigation">
<?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) ); ?>
</nav><!-- #site-navigation -->
</div>
<div class="connexion">
<?php $user = wp_get_current_user(); ?>
<?php if($user->ID == 0): ?>
<a hreft="<?php echo bloginfo('url'); ?>/login">Se connecter</a>
<a hreft="<?php echo bloginfo('url'); ?>/register">S'inscrire</a>
<?php esle: ?>
Salut <?php echo $user->user_login; ?>,
<a href="<?php echo bloginfo('url'); ?>/profil">Mon profil</a> |
<a href="<?php echo bloginfo('url'); ?>/logout">Se déconnecter</a>
<?php endif; ?>
</div>
</div>
</div>
Les liens n'aparraisse pas j'ai beau cherché je ne comprend pas pourquoi rien ne s'affiche dans ma navbar.
Merci pour le tuto !
Hello,
J'ai pu trouver la solution du wp_signon, en fait le wp_signon($user) renvoyait l'ID et non le tableau avec les valeurs.
Solution qui marche chez moi, completer le code avec :
$creds = array();
$creds['user_login'] = $d['user_login'];
$creds['user_password'] = $d['user_pass'];
$creds['remember'] = true;
$user = wp_signon( $creds, false );
if ( is_wp_error($user) )
echo $user->get_error_message();
Script php complet ci-dessous :
<?php
/*
Template Name : Register
*/
$error = false;
if(!empty($_POST)){
$d = $_POST;
if($d['user_pass'] != $d['user_pass2']){
$error = 'Les 2 mots de passes ne sont pas identiques';
}else{
if(!is_email($d['user_email'])){
$error = 'Veuillez entrer un email valide';
}else{
$userdata = array(
'user_login' => $d['user_login'],
'user_email' => $d['user_email'],
'user_pass' => $d['user_pass'],
'user_registered' => date('Y-m-d H:i:s')
);
$user = wp_insert_user($userdata);
if(is_wp_error($user)){
$error = "test".$user->get_error_message();
}else{
$object = 'Confirmation de votre inscription';
$msg = 'Vous êtes maintenant inscrit';
$headers = 'From : '.get_option('admin_email')."\r\n";
wp_mail($d['user_email'], $object, $msg, $headers);
$creds = array();
$creds['user_login'] = $d['user_login'];
$creds['user_password'] = $d['user_pass'];
$creds['remember'] = true;
$user = wp_signon( $creds, false );
if ( is_wp_error($user) )
echo $user->get_error_message();
$d = array();
header('location:profil');
}
}
}
}
ob_start();
?>
Merci encore Grafikart pour ce super tuto qui m'a permis de mettre en place une application web pro pour la gestion des patients d'un centre privé.
Effectivement --'
Merci ça apparait maintenant, mais les liens se connecter et s'inscrire ne fonctionne pas portant quand j'inspecte l'élément j'ai bien l'url qui redirige vers http://localhost/wordpress/login et /register les liens pour /profil et /logout fonctionnent eux.
Essaye ça dans wordpress : Réglages -> Permaliens -> Enregistrer les modifications. Si pas bon, il y a peut-être une erreur au niveau du code.
Pour les permaliens mon réglage et sur "nom de l'article", j'ai laissé comme tel, j'ai enregistré les modifications, mais rien ne change portant les codes sont exactement pareils.
<?php $user = wp_get_current_user(); ?>
<?php if($user->ID == 0): ?>
<a hreft="<?php echo bloginfo('url'); ?>/login">Se connecter</a>
<a hreft="<?php echo bloginfo('url'); ?>/register">S'inscrire</a>
<?php else: ?>
Hello, Shibes :
<a href="<?php echo bloginfo('url'); ?>/profil">Mon profil</a> |
<a href="<?php echo bloginfo('url'); ?>/logout">Se déconnecter</a>
<?php endif; ?>
J'ai même essayé de cette façon, sans succès:
<?php $user = wp_get_current_user(); ?>
<?php if($user->ID == 0): ?>
<a hreft="http://localhost/dogepress/login">Se connecter</a>
<a hreft="http://localhost/dogepress/register">S'inscrire</a>
<?php else: ?>
Hello, Shibes :
<a href="<?php echo bloginfo('url'); ?>/profil">Mon profil</a> |
<a href="<?php echo bloginfo('url'); ?>/logout">Se déconnecter</a>
<?php endif; ?>
Le problème doit certainement être dans le fichier functions.php ? Tu as mis la fonction site_router() comme dans le tutoriel ?
Oui là voila
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 'doge-login.php';
die();
}else if(count($url) == 1 && $url[0] == 'profil'){
require 'doge-profil.php';
die();
}else if(count($url) == 1 && $url[0] == 'logout'){
wp_logout();
header('location:'.$root);
die();
} else if(count($url) == 1 && $url[0] == 'register'){
require 'doge-register.php';
die();
}
}
add_filter('show_admin_bar','__return_false');
C'est ok chez moi avec ton code. Où as-tu mis le fichier doge-login.php ? Tu as pas d'erreur quand vas sur /login ?
Tout est dans mon fichier de themes avec le header.php, footer.php etc.., quand j'arrive sur /login je n'ai pas d'erreur. Par contre quand je vais sur /register et que j'enregistre un nouvelle utiliseteur, l'utilisateur et bien enregistré mais j'ai 4 erreurs qui arrive:
Warning: Cannot use a scalar value as an array in wamp\www\wordpressPress\wp-includes\user.php on line 39
Warning: Cannot use a scalar value as an array in wamp\www\wordPress\wp-includes\user.php on line 54
Warning: Cannot use a scalar value as an array in wamp\www\wordPress\wp-includes\user.php on line 54
Warning: Cannot modify header information - headers already sent by (output started at wamp\www\wordpressPress\wp-includes\user.php:54) in \wamp\www\wordPress\wp-content\themes\projet\doge-register.php on line 28
Sur le fichier user.php c'est un probléme avec signon
function wp_signon( $credentials = array(), $secure_cookie = '' ) {
if ( empty($credentials) ) {
if ( ! empty($_POST['log']) )
$credentials['user_login'] = $_POST['log'];
if ( ! empty($_POST['pwd']) )
$credentials['user_password'] = $_POST['pwd'];
if ( ! empty($_POST['rememberme']) )
$credentials['remember'] = $_POST['rememberme'];
}
if ( !empty($credentials['remember']) )
$credentials['remember'] = true;
else
$credentials['remember'] = false;
/**
* Fires before the user is authenticated.
*
* The variables passed to the callbacks are passed by reference,
* and can be modified by callback functions.
*
* @since 1.5.1
*
* @todo Decide whether to deprecate the wp_authenticate action.
*
* @param string $user_login Username, passed by reference.
* @param string $user_password User password, passed by reference.
*/
do_action_ref_array( 'wp_authenticate', array( &$credentials['user_login'], &$credentials['user_password'] ) );
if ( '' === $secure_cookie )
$secure_cookie = is_ssl();
Je n'ai rien modifier au fichier.
Pour le doge-register.php c'est le header('location:profil'); qui pose problème
$error = false;
if(!empty($_POST)){
$d = $_POST;
if($d['user_password'] != $d['user_password2']){
$error = 'Les 2 mots de passes ne correspondent pas';
}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_password' => $d['user_password'],
'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 = 'Vous êtes maintenant inscrit';
$headers = 'From: '.get_option('admin_email')."\r\n";
wp_mail($d['user_email'], 'Inscription réussie', $msg, $headers );
$d = array();
wp_signon($user);
header('Location:profil');
}
}
}
}
Je ne pense pas que ce soit très bon de faire ça mais j'ai mis:
error_reporting(0);
@ini_set(‘display_errors’, 0);
Dans le fichier class-wp-error.php les erreurs sont partis et la redirection ce fait aprés l'enregistrement. Si quelque'un sait comment régler le probléme avec signon, on ne sait jamais. j'ai lus tout les commentaires du tutos plusieurs fois j'ai trouvé ça à propos de signon:
"3eme : vers la fin, au moment du test de l'inscription, si l'on suis à la lettre le code de la vidéo, la redirection vers la page profil échoue. J'ai bien vu la modification à effectuer en sous-titre mais ça n'y fait rien.
Après 10 min d'arrachage de cheveux, j'ai compris que le champs mot de passe ne doit pas s'appeler user_pass mais user_password et avec ce changement, wp_signon($d) fonctionne."
Comme vous pouvez le voir plus haut le probléme persisté même avec ce changement.
Mais les liens pour se connecter s'inscrire dans le header ne fonctionne toujours pas.
J'ai vus qu'une personne sur le forum à posté: "Je suis arrivé a le faire fonctionner mais je ne sais absolument plus comment. Je crois qu'il manque une virgules ou un point-virgules a un moment du tutoriel."
La virgule en question ne serait pas la ?:
$user = wp_insert_user(array(
'user_login' => $d['user_login'],
'user_password' => $d['user_password'],
'user_email' => $d['user_email'],
'user_registered' => date('Y-m-d H:i:s') <----
user_registered est le seul sans virgule.
J'ai résolu un de met problème, les liens se connecter et s'enregistrer qui ne marché pas j'ai fait une faute de frappe au niveau des href j'ai noté hreft...
Pour les erreurs php quand un utilisateur s'enregistre j'ai sus isolé le problème sans le wp_signon($user); ça fonctionne :
Pourquoi avec les signon ça ne fonctionne pas:
<?php
/*
Template Name: Connexion
*/
$error = false;
if(!empty($_POST)){
$d = $_POST;
if($d['user_pass'] != $d['user_pass2']){
$error = 'Les 2 mots de passes ne correspondent pas';
}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 = 'Vous êtes maintenant inscrit';
$headers = 'From: '.get_option('admin_email')."\r\n";
wp_mail($d['user_email'], 'Inscription réussie', $msg, $headers );
$d = array();
wp_signon($user); /*sans cette ligne tout fonctionne*/
header('Location:profil');
}
}
}
}
?>
<?php get_header();?>
<div class="single">
<div class="post">
<h1>Se connecter</h1>
<?php if ($error): ?>
<div class="error">
<?php echo $error; ?>
</div>
<?php endif ?>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
<label for="user_login">Votre login</label>
<input type="text" value="<?php echo isset($d['user_login']) ? $d['user_login'] : ''; ?>" name="user_login" id="user_login">
<label for="user_email">Votre email</label>
<input type="text" value="<?php echo isset($d['user_email']) ? $d['user_email'] : ''; ?>" name="user_email" id="user_email">
<label for="user_pass">Votre mot de pass</label>
<input type="password" value="<?php echo isset($d['user_pass']) ? $d['user_pass'] : ''; ?>" name="user_pass" id="user_pass">
<label for="user_pass2">Confirmez votre mot de pass</label>
<input type="password" value="<?php echo isset($d['user_pass2']) ? $d['user_pass2'] : ''; ?>" name="user_pass2" id="user_pass2">
<input type="submit" value="Se connecter">
</form>
</div>
</div>
<?php get_footer(); ?>
Si j'ai bien compris signon me permet d'être connecté après mon inscription mais comment faire pour qu'il marche ? je vias allez faire un tour sur le codex.
Dans les commentaires du tutos il y a un gars qui dit: "Après 10 min d'arrachage de cheveux, j'ai compris que le champs mot de passe ne doit pas s'appeler user_pass mais user_password et avec ce changement, wp_signon($d) fonctionne."
Pensez-vous que ça puisse résoudre mon le problème ?
J'ai enlevé le signon.. je redirige les users sur la page d'acceuille aprés leur inscription le module de connexion étant dans le header. Si jamais quelqu'un passe par la et qui à une idée qui lui passe qu'il n'hésite pas ;).