Він не працював ні з вашими відповідями, а лише додав дрібницю, він працював! Ось мій код:
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 );
Тільки я додав /wp-login.php
порівняно з відповіддю @ Метта, але для мене це було ключовим. Сподіваюся, що це допомагає! :)
** редагувати:
Я виявив ПОМИЛУ, коли ви ВИПУСКОВО Wordpress для навігації в HTTPS. Цей метод не працює, оскільки перенаправлення знаходиться в HTTP. Для вирішення проблеми я змінив функцію. Це результат:
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 );
Я перевіряю протокол , а потім я видалив « esc_url
» і додав правильний протокол: $protocol://
. Також я змінив ""
.
Я заснований на цій сторінці .