No ha funcionado ninguna de sus respuestas, pero solo agregó una pequeña cosa, ¡funcionó! Aquí mi código:
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 );
Solo agregué /wp-login.php
en comparación con la respuesta de @ Matt, pero para mí ha sido la clave. ¡Espero que ayude! :)
**EDITAR:
Detecté un ERROR cuando estás forzando wordpress para navegar en HTTPS. Este método no funciona porque la redirección está en HTTP. Para solucionar el problema, cambié la función. Este es el resultado:
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 );
Puedo comprobar el protocolo y luego Suprimí ' esc_url
' y añadió el protocolo correcto: $protocol://
. También cambié el ""
.
Estoy basado en esta página .