Je fournis la connexion front-end dans un modèle, en utilisant la fonction wp_login_form. Il gère la redirection après connexion et déconnexion assez proprement! Mais si le nom d'utilisateur/mot de passe ne correspond pas, ou est inexistant, l'utilisateur est redirigé vers la page de connexion administrateur, avec l'erreur saccadée js. C'est également le cas lorsque j'essaie de réinitialiser le mot de passe, il me faut la page backend où je dois entrer mon email pour réinitialiser le mot de passe. Je veux montrer ces deux activités sur mon modèle. Est-ce qu'il y a un moyen de faire ça?
Merci d'avance pour toute aide.
Oui c'est possible. Vous devez créer trois filtres pour cela.
class WPSE29338_Admin {
public static function setup() {
add_filter('login_url', array(__CLASS__, 'modifyLoginURL'), 10, 2);
add_filter('lostpassword_url', array(__CLASS__, 'modifyLostPasswordURL'), 10, 2);
add_filter('register', array(__CLASS__, 'modifyRegisterURL'));
}
public static function modifyLoginURL($loginUrl, $redirect = '') {
$loginUrl = site_url('login'); // Link to login URL
if(!empty($redirect)) {
$loginUrl = add_query_arg('redirect_to', urlencode($redirect), $loginUrl);
}
return $loginUrl;
}
public static function modifyLostPasswordURL($lostpwUrl, $redirect = '') {
$lostpwUrl = wp_login_url() . '#lostpassword'; // Link to lostpassword URL
if(!empty($redirect)) {
$lostpwUrl = add_query_arg('redirect_to', urlencode($redirect), $lostpwUrl);
}
return $lostpwUrl;
}
public static function modifyRegisterURL($registerUrl) {
if(!is_user_logged_in()) {
if (get_option('users_can_register')) {
$registerUrl = '<a href="' . wp_login_url() . '#register" class="btn">' . __('Register') . '</a>'; // Link to register URL
} else {
$registerUrl = '';
}
}
return $registerUrl;
}
}
Nous devons d’abord filtrer la sortie de la fonction wp_login_url()
qui est utilisée par wp_login_form()
dans l’attribut forms action
.
Regardez la méthode modifyLoginUrl()
. Ici, nous stockons l'URL de la page login
à l'intérieur de la variable $loginUrl
. Cette page doit exister à l'intérieur de WordPress, créez-la d'abord.
Ensuite, nous avons besoin d’un filtre pour les fonctions wp_lostpassword_url()
et wp_register()
. C'est fondamentalement la même chose. L'URL du site est stockée dans les variables $lostpwUrl
et $registerUrl
.
Dernier point mais non le moindre, vous devez appeler la classe avec le bon crochet d'action. Pour les thèmes, cela devrait être after_setup_theme
et pour les plugins, vous pouvez utiliser plugins_loaded
.
add_action('after_setup_theme', 'wpse29338_admin_init');
function wpse29338_admin_init() {
WPSE29338_Admin::setup();
}
add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
WPSE29338_Admin::setup();
}