По умолчанию, при регистрации новых пользователей или восстановления паролей в сети виртуальных сайтов WordPress multisite, осуществляется перенаправление (redirect) на базовый сайт сети. То есть, вместо регистрации или восстановлени пароля на Вашем сайте, пользователь видит базовый сайт сети. В статье описываются небольшие изменения ядра WordPress устраняющие такую переадресацию в сети виртуальных сайтов WordPress multisite.
Во-первых, мне непонятно, зачем пользователям показывать что-то еще кроме сайта, на котором они желают зарегистрироваться или восстановить пароль. Во-вторых, с моей точки зрения, для пользователя будет выглядеть несколько странно – почему-то регистрация осуществляется совсем не на том сайте, где он/она хотели зарегистрироваться.

Рис. 1. Вход пользователя на сайт
На рис. 1. ссылки “Регистрация” и “Забыли пароль?” перенаправляют пользователя на базовый сайт сети.
По моему мнению, пользователю совсем не обязательно знать отдельный ли сайт у нас или сеть виртуальных сайтов. Ему/ей нужна некоторая информация (услуги, товары и т. д.) с того сайта, на котором он/она регистрируются. И чем проще будет процесс регистрации и чем меньше проблем при этом возникнет, тем больше вероятности, что пользователь станет потребителем того, что Вы на сайте предлагаете.
Что делать – внести небольшие изменения в два файла ядра WordPress.
1. Открываем безопасное соединение с сервером. Как это сделать см. “Что такое ssh/sftp и для чего он нужен?” для OS Linux (OSX) или “SSH клиент для Windows PuTTY” и “Клиент SSH для Windows Bitvise Tunnelier” для Windows.
2. Стать суперпользователем (См. «Команды Linux. Краткое описание.«)
#su
3. Открываем редактором vi файл wordpress wp-includes/general-template.php (подробнее см. “Редактор vi. Краткая инструкция“)
vi /chroot/httpd/var/www/wp-includes/general-template.php для одиночного сайта
vi /chroot/httpd/var/www/wordpress/wp-includes/general-template.php для сети виртуальных сайтов
В отрезке кода
function wp_lostpassword_url( $redirect = '' ) { $args = array( 'action' => 'lostpassword' ); if ( !empty($redirect) ) { $args['redirect_to'] = $redirect; } $lostpassword_url = add_query_arg( $args, network_site_url('wp-login.php', 'login') ); /** * Filter the Lost Password URL. * * @since 2.8.0 * * @param string $lostpassword_url The lost password page URL. * @param string $redirect The path to redirect to on login. */ return apply_filters( 'lostpassword_url', $lostpassword_url, $redirect ); }
удалить в выделенной строчке 6 network_. Сохраняем файл. Закрываем редактор vi.
4. Открываем редактором vi файл wordpress wp-login.php
vi /chroot/httpd/var/www/wp-login.php для одиночного сайта
vi /chroot/httpd/var/www/wordpress/wp-login.php для сети виртуальных сайтов
a). В отрезке кода
do_action( 'login_head' ); if ( is_multisite() ) { $login_header_url = network_home_url(); $login_header_title = get_current_site()->site_name; } else {
в выделенной строчке 3 удалить network_.
b). В отрезке кода
$message = __('Someone requested that the password be reset for the following account:') . "\r\n\r\n"; $message .= network_home_url( '/' ) . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= __('If this was a mistake, just ignore this email and nothing will happen.') . "\r\n\r\n"; $message .= __('To reset your password, visit the following address:') . "\r\n\r\n"; $message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";
в выделенных строках 2 и 6 удалить network_.
c). В отрезке кода
<form name="lostpasswordform" id="lostpasswordform" action="<?php echo esc_url( network_site_url( 'wp-login.php?action=lostpassword', 'login_post' )); ?>" method="post">
и
<form name="resetpassform" id="resetpassform" action="<?php echo esc_url( site_url( 'wp-login.php?action=resetpass', 'login_post' )); ?>" method="post" autocomplete="off">
удалить network_.
а так же, в отрезке кода
case 'register' : if ( is_multisite() ) { /** * Filter the Multisite sign up URL. * * @since 3.0.0 * * @param string $sign_up_url The sign up URL. */ // wp_redirect( apply_filters( 'wp_signup_location', $sign_up_url ) ); // exit; }
закомментировать выделенные строчки 10 и 11. Должно быть как в тексте (//).
Сохраняем файл. Закрываем редактор vi. Теперь ссылки. отмеченные красным на рис. 1. больше не перенаправляются на базовый сайт сети. Регистрация и восстановление пароля происходит в рамках одного сайта.
Важно!!! При каждом обновлении WordPress необходимо проверять, остались ли внесенные изменения, если они пропали, то сделать их заново.
Описаны изменения ядра WordPress устраняющие перенаправление пользователя на базовый сайт сети при регистрации или восстановлении пароля в сети виртуальных сайтов WordPress multisite.
не работает к сожалению. при регистрации всё равно идёт редирект
Работает. Вы не забыли закомментировать редирект? (зеленым в последнем кусочке кода)
А есть версия для вордпресса 4.2? там коды в некоторых местах отличаются. Например такого
case ‘register’ :
if ( is_multisite() ) {
$sign_up_url =network_site_url( ‘wp-signup.php’ );
/**
* Filter the Multisite sign up URL.
*
* @since 3.0.0
*
* @param string $sign_up_url The sign up URL.
*/
// wp_redirect( apply_filters( ‘wp_signup_location’, $sign_up_url ) );
// exit;
}
вообще нет. Там по другому реализваоно. Я не программист сам не разобрался, заменил эту часть вашим кодом, так у меня вроде все работает, но выдает ошибку что пара логин/пароль введена не правильно, даже при попытке зарегистрироваться. В общем не работает ваш код….
Добрый день!
Спасибо за письмо.
Исправил в соответсвии с WordPress 4.2 Должно получиться.
WordPress 4.2.2 все исправил по рекомендациям (раньше в предыдущих версиях также исправлял, все было нормально). Но сейчас, при сбросе пароля пользователя второго сайта сети, когда приходит письмо со ссылкой на второй сайт, содержащей ключ активации для сброса пароля, система ругается “Извините, этот ключ неверен”, причем сообщение об ошибке отображается уже на основном сайте сети (если сбросить пароль пользователя основного сайта, все работает нормально)
Проверьте пожалуйста, что исправили обе строчки во фрагменте b)
во время регистрации пользователю приходит письмо для генерации пароля , ссылка ведет на основной сайт сети, как это поправить?
Для переадресации писем по-моему, надо поправить две ссылки. Вы наверное вторую не поправили7