Cela n'a fonctionné aucune de vos réponses mais seulement en ajoutant une petite chose, cela a fonctionné! Voici mon code:
function login_redirect( $redirect_to, $request, $user ){
if(isset($_REQUEST['redirect_to'])){
return $_REQUEST['redirect_to'];
}
return admin_url();
}
add_filter( 'login_redirect', 'login_redirect', 10, 3 );
function restrict_access_if_logged_out(){
if (!is_user_logged_in() && !is_home()){
$redirect = home_url() . '/wp-login.php?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]));
wp_redirect( $redirect );
exit;
}
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );
Seulement, j'ai ajouté /wp-login.php
par rapport à la réponse de @ Matt, mais pour moi, c'est la clé. J'espère que cela pourra aider! :)
**ÉDITER:
J'ai détecté une ERREUR lorsque vous utilisez FORCE wordpress pour navegate en HTTPS. Cette méthode ne fonctionne pas car la redirection est en HTTP. Pour résoudre le problème, j'ai changé la fonction. Voici le résultat:
function restrict_access_if_logged_out(){
global $wp;
$protocol='http';
if (isset($_SERVER['HTTPS']))
if (strtoupper($_SERVER['HTTPS'])=='ON')
$protocol='https';
if (!is_user_logged_in() && !is_home() && ($wp->query_vars['pagename'] != 'downloads') ){
$redirect = home_url() . "/wp-login.php?redirect_to= $protocol://" . $_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]);
wp_redirect( $redirect );
exit;
}
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );
Je vérifie le protocole et je supprimé « esc_url
» et ajouté le protocole approprié: $protocol://
. J'ai aussi changé le ""
.
Je suis basé avec cette page .