Как перенаправить пользователя после успешной регистрации на шаблон страницы?
Каждый раз после регистрации я попадаю на страницу wp-login (бэкенд):

Есть ли способ перенаправить пользователей после регистрации на шаблон страницы (фронтенд)?
Вы можете использовать фильтр registration_redirect, чтобы передать свой собственный URL, например:
function wpse_19692_registration_redirect( $url, $result ) {
$is_error = is_wp_error( $result );
$user_id = $is_error ? 0 : $result;
$user = $is_error ? false : get_userdata( $user_id );
if ( $user ) {
// Регистрация прошла успешно, сделайте что-нибудь с $user
}
return home_url( '/my-page' );
}
add_filter( 'registration_redirect', 'wpse_19692_registration_redirect' );
Поместите этот код в ваш functions.php или плагин :)
Спасибо за ответ, но меня всё ещё перенаправляет на wp-login в админку :( (Я работаю на локальном сервере LAMP, но не думаю, что это причина).
wyc
Вы уверены, что тема с этим кодом активна? И какую версию WP вы используете? У меня всё работало (проверил только что, 3.1.3).
TheDeadMedic
ОК, заработало после деактивации bbPress, видимо есть конфликт с этим плагином. Спасибо!
wyc
@TheDeadMedic У меня похожий вопрос, но я регистрируюсь со страницы с пользовательским шаблоном, который включает форму регистрации. Перенаправление не работает, и меня возвращает на главную страницу регистрации с сообщением проверить email для получения пароля. Не могли бы вы взглянуть на мой вопрос? http://wordpress.stackexchange.com/questions/130560/redirect-to-custom-url-after-registering-from-a-page-with-registration-form
Anagio
@TheDeadMedic Есть ли способ получить ID нового зарегистрированного пользователя в этом фильтре? Подскажите, пожалуйста!
karlosuccess
Вот что я использую
<form action="<?php echo site_url('wp-login.php?action=register', 'login_post') ?>" method="post">
<input type="text" name="user_login" value="Имя пользователя" id="user_login" class="input" />
<input type="text" name="user_email" value="E-Mail" id="user_email" class="input" />
<?php do_action('register_form'); ?>
<input type="submit" value="Зарегистрироваться" id="register" />
<input type="hidden" name="redirect_to" value="/success"/>
<p class="statement">Пароль будет отправлен вам на email.</p>
</form>
Если, как и я, вы используете плагин, например ProfilePress, для создания формы регистрации в WordPress, следующий код автоматически войдет в систему и перенаправит зарегистрированных пользователей на приветственную страницу.
add_action( 'pp_after_registration', 'pp_redirect_after_registration', 10, 3 );
function pp_redirect_after_registration( $form_id, $user_data, $user_id ) {
wp_set_auth_cookie( $user_id );
wp_set_current_user( $user_id );
$custom_page_url = 'http://example.com/welcome/';
wp_redirect( $custom_page_url );
exit;
}
Примечание: я использую бесплатную версию плагина (https://wordpress.org/support/plugin/ppress), и приведенный выше код работает как в бесплатной, так и в PRO-версии.
Я разработал плагин для решения этой проблемы. Также ниже представлен исходный код для редиректа без использования плагинов.
/**
* Перенаправление пользователей на пользовательский URL в зависимости от их роли после входа
**/
function wp_woo_custom_redirect( $redirect, $user ) {
// Получаем первую роль из всех ролей, назначенных пользователю
$role = $user->roles[0];
$dashboard = admin_url();
$myaccount = get_permalink( wc_get_page_id( 'my-account' ) );
if( $role == 'administrator' ) {
// Перенаправляем администраторов в админ-панель
$admin_redirect = get_option('admin_redirect');
$redirect = $admin_redirect;
} elseif ( $role == 'shop-manager' ) {
// Перенаправляем менеджеров магазина в админ-панель
$shop_manager_redirect = get_option('shop_manager_redirect');
$redirect = $shop_manager_redirect;
} elseif ( $role == 'customer' || $role == 'subscriber' ) {
// Перенаправляем покупателей и подписчиков на страницу "Мой аккаунт"
$customer_redirect = get_option('customer_redirect');
$redirect = $customer_redirect;
} else {
// Перенаправляем все остальные роли на предыдущую посещённую страницу или на главную, если предыдущая не доступна
$redirect = wp_get_referer() ? wp_get_referer() : home_url();
}
return $redirect;
}
add_filter( 'woocommerce_login_redirect', 'wp_woo_custom_redirect', 10, 2 );
Если вам удобнее работать с плагином, а не с кодом? Вы можете скачать и установить мой плагин "WP WooCommerce Redirect"