У меня есть веб-сайт с пользовательской системой. Я хочу интегрировать систему Wordpress в этот веб-сайт, но я все же хочу использовать страницы регистрации/входа в веб-сайт. Я не хочу, чтобы кто-либо мог войти в систему или зарегистрироваться, используя регистрационные формы Wordpress. Вместо этого, когда они пытаются получить доступ к страницам входа/регистрации в Wordpress, я хочу, чтобы эти страницы перенаправляли их на мои собственные страницы входа/регистрации.
Есть ли способ сделать это? Я пробовал Google, но все, что я мог найти, было перенаправлено ПОСЛЕ того, как пользователь входит в систему или регистрируется, чего я не хочу.
Спасибо заранее.
Для этого вам необходимо перенаправить страницу входа/регистрации на свои пользовательские страницы.
Итак, напишите этот код в вашем functions.php
файле. Под вашей активированной папкой темы. Передайте свой путь к странице в качестве аргумента.
add_action('init','possibly_redirect');
function possibly_redirect(){
global $pagenow;
if( 'wp-login.php' == $pagenow ) {
wp_redirect('http://google.com/');
exit();
}
}
Чтобы ограничить прямой доступ только для "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');
Если вы используете пользовательскую страницу входа, но все еще используете 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();
}
}
Правильный крючок действия 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/') );
});
Вы могли бы защелкнуться на крючок login_head
и выпустить там редирект.