2009-12-29 5 views
17

У меня есть веб-сайт с пользовательской системой. Я хочу интегрировать систему пользователя Wordpress в этот веб-сайт, но я все же хочу использовать страницы регистрации/входа в веб-сайт. Я не хочу, чтобы кто-либо мог войти в систему или зарегистрироваться с помощью регистрационных форм Wordpress. Вместо этого, когда они пытаются получить доступ к страницам входа/регистрации в Wordpress, я хочу, чтобы эти страницы перенаправляли их на мои собственные страницы входа/регистрации.Перенаправление страницы входа/регистрации Wordpress на пользовательскую страницу входа/регистрации

Есть ли способ сделать это? Я пробовал Google, но все, что я мог найти, это перенаправление ПОСЛЕ того, как пользователь входит в систему или регистрируется, чего я не хочу.

Заранее спасибо.

ответ

23

Для этого вам необходимо перенаправить страницу входа/регистрации на свои пользовательские страницы. Итак, напишите этот код в файле functions.php Под вашей активированной папкой темы. Передайте свой путь к странице в качестве аргумента.

add_action('init','possibly_redirect'); 

function possibly_redirect(){ 
global $pagenow; 
if('wp-login.php' == $pagenow) { 
    wp_redirect('http://google.com/'); 
    exit(); 
} 
} 
+0

Где я могу зарегистрировать вызов add_action? где я могу это назвать? извините меня за то, что я разработчик .Net. –

+0

У вас есть два варианта. Или бросьте вышеуказанный код в плагин или создайте файл functions.php в папке тем и добавьте выше. – nickohrn

+5

Следует добавить, что это отключает возможность выхода из системы, если явно не сделано с целевой целевой страницы. – thinice

1

Возможно, вы сможете защелкнуться на крючок login_head и отправить туда переадресацию.

17

Чтобы ограничить прямой доступ только для 'в.ч.-login.php', без POST или GET запрос (полезно для пользовательских Ajax форм авторизации), я использую передовые функции:

function possibly_redirect(){ 
    global $pagenow; 
    if('wp-login.php' == $pagenow) { 
    if (isset($_POST['wp-submit']) || // in case of LOGIN 
     (isset($_GET['action']) && $_GET['action']=='logout') || // in case of LOGOUT 
     (isset($_GET['checkemail']) && $_GET['checkemail']=='confirm') || // in case of LOST PASSWORD 
     (isset($_GET['checkemail']) && $_GET['checkemail']=='registered')) return; // in case of REGISTER 
    else wp_redirect(home_url()); // or wp_redirect(home_url('/login')); 
    exit(); 
    } 
} 
add_action('init','possibly_redirect'); 
+0

Это лучше работает для большего количества сценариев, спасибо. – Chozen

+0

Принятый ответ не работает для тех из нас, кто использует wp_login_form() - вместо этого используйте этот. – piersb

2

Если вы воспользовавшись специальной страницей входа в систему, но при этом используя wp_login_form(), имейте в виду, что форма будет POST для wp-login.php, поэтому вам нужно будет проверить, пуст ли $ _POST до перенаправления.

function prefix_wp_login_redirect() { 
    global $pagenow; 
    if($pagenow == 'wp-login.php' && empty($_POST)) { 
    auth_redirect(); 
    exit(); 
    } 
} 
1

Правильный крюк действия login_init что только пожары на wp-login.php.

Здесь нет ?action=action-name не запрашивается, так что главная Войти страница:

add_action('login_init', function(){ 
    if(!isset($_GET['action'])) { 
     wp_redirect('http://example.com'); 
    } 
}); 

Для всех запросов, мы можем использовать специфический крючок login_form_ACTION-NAME, т.е. postpass, logout, lostpassword, retrievepassword, resetpass, register и login. Пример:

add_action('login_form_register', function(){ 
    wp_redirect(site_url('custom-registration/')); 
}); 
Смежные вопросы