Переадресация при регистрации WordPress multisite

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

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

Регистрация новых пользователей WordPress multisite. Рис. 1. Вход пользователя на сайт

Рис. 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.

,

8 Responses to Переадресация при регистрации WordPress multisite

  1. max 14/12/2014 at 16:40 #

    не работает к сожалению. при регистрации всё равно идёт редирект

    • stseprounof
      stseprounof 14/12/2014 at 16:47 #

      Работает. Вы не забыли закомментировать редирект? (зеленым в последнем кусочке кода)

  2. umnikzz 05/05/2015 at 19:12 #

    А есть версия для вордпресса 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;
    }

    вообще нет. Там по другому реализваоно. Я не программист сам не разобрался, заменил эту часть вашим кодом, так у меня вроде все работает, но выдает ошибку что пара логин/пароль введена не правильно, даже при попытке зарегистрироваться. В общем не работает ваш код….

    • stseprounof
      stseprounof 06/05/2015 at 14:01 #

      Добрый день!

      Спасибо за письмо.
      Исправил в соответсвии с WordPress 4.2 Должно получиться.

  3. Тагир 08/05/2015 at 15:17 #

    WordPress 4.2.2 все исправил по рекомендациям (раньше в предыдущих версиях также исправлял, все было нормально). Но сейчас, при сбросе пароля пользователя второго сайта сети, когда приходит письмо со ссылкой на второй сайт, содержащей ключ активации для сброса пароля, система ругается “Извините, этот ключ неверен”, причем сообщение об ошибке отображается уже на основном сайте сети (если сбросить пароль пользователя основного сайта, все работает нормально)

    • stseprounof
      stseprounof 08/05/2015 at 15:33 #

      Проверьте пожалуйста, что исправили обе строчки во фрагменте b)

  4. Влаидимир 28/11/2016 at 11:55 #

    во время регистрации пользователю приходит письмо для генерации пароля , ссылка ведет на основной сайт сети, как это поправить?

    • stseprounof
      stseprounof 28/11/2016 at 20:40 #

      Для переадресации писем по-моему, надо поправить две ссылки. Вы наверное вторую не поправили7

Leave a Reply to umnikzz Click here to cancel reply.