Перенаправление страницы входа / регистрации Wordpress на пользовательскую страницу входа / регистрации

17

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

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

Спасибо заранее.

Теги:
redirect
login
registration

5 ответов

22
Лучший ответ

Для этого вам необходимо перенаправить страницу входа/регистрации на свои пользовательские страницы. Итак, напишите этот код в вашем 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 в папке вашей темы и добавьте приведенный выше.
Показать ещё 4 комментария
17

Чтобы ограничить прямой доступ только для "wp-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
    Это работает лучше для большего количества сценариев, спасибо.
  • 0
    Принятый ответ не работает для тех из нас, кто использует wp_login_form () - используйте этот.
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/') );
});
1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню