У меня есть веб-сайт с пользовательской системой. Я хочу интегрировать систему пользователя WordPress в этот веб-сайт, но я все же хочу использовать страницы регистрации / входа в веб-сайт. Я не хочу, чтобы кто-либо мог войти в систему или зарегистрироваться с помощью регистрационных форм WordPress. Вместо этого, когда они пытаются получить доступ к страницам входа / регистрации в WordPress, я хочу, чтобы эти страницы перенаправляли их на мои собственные страницы входа / регистрации.
Есть ли способ сделать это? Я пробовал Google, но все, что я мог найти, это перенаправление ПОСЛЕ того, как пользователь входит в систему или регистрируется, чего я не хочу.
Заранее спасибо.
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_head
и выпустить там перенаправление.
Правильный крюк действия – 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/') ); });