Wordpress перенаправление при входе в систему

У нас есть двуязычная тема Wordpress. Английская версия находится по адресу mydomain.com, а чешская — в виртуальном каталоге по адресу mydomain.com/cs/.

Когда пользователь входит в систему по адресу mydomain.com/login, он перенаправляется на mydomain.com/dashboard, как указано в приведенном ниже коде (это имя страницы). Мне нужно, чтобы пользователи, выполняющие вход с помощью mydomain.com/cs/login, выполняли вход в mydomain.com/cs/dashboard.

Код, используемый для этой функции, находится здесь:

<?php wp_login_form( apply_filters( 'atcf_shortcode_profile_login_args', array( 'redirect' => isset ( $edd_options[ 'profile_page' ] ) ? get_permalink( $edd_options[ 'profile_page' ] ) : home_url() ) ) ); ?>

home_url возвращает полный URL-адрес сайта. Любые идеи, как я могу добиться перенаправления, избегая текущего каталога (/login)?


person JoeW    schedule 11.04.2013    source источник


Ответы (1)


Вы можете проверить значение $_SERVER["REQUEST_URI"], чтобы увидеть, начинается ли оно с /cs/, а затем соответствующим образом динамически обновить значение страницы профиля.

// The current URI (does not incude host/domain)
$uri = $_SERVER["REQUEST_URI"];
// The home URL
$redirect = home_url();

// $edd_options[ 'profile_page' ] must return the page ID for get_permalink to work
if ( isset( $edd_options[ 'profile_page' ] ) ) {

    // The profile URL. 
    $profile_page_id = $edd_options[ 'profile_page' ];
    $redirect = get_permalink( $profile_page_id );

    // Check if the URI starts with /cs/
    if ( strpos( $uri, '/cs/' ) == 0 ){
        // Explode into an array
        $url_array = explode( '/', $profile_page );

        // Insert /cs/ into array
        $url_array = array_slice($url_array, 0, 3, true) +
                 array("x"=>"cs") +
                 array_slice($url_array, 3, count($url_array)-3, true);

        // Implode back to a string
        $redirect = implode( '/', $url_array );
    }
}

// Set up params to send to login form
$args = apply_filters( 'atcf_shortcode_profile_login_args', array( 'redirect' => $redirect ) );
wp_login_form( $args );
person doublesharp    schedule 11.04.2013
comment
Даблшарп отличный материал! Я заменил текущий фрагмент кода на ваш, и хотя очевидных ошибок не было, страница не переходила на страницу /cs/, как должна была. Я также понял, что get_permalink получает постоянную ссылку текущей страницы. Любые идеи? - person JoeW; 11.04.2013
comment
Вы пытаетесь добавить «/cs/» к домашнему URL-адресу или странице профиля? Если это страница профиля, вам просто нужно изменить код, чтобы использовать его значение вместо дома. get_permalink() по умолчанию указывает на текущую страницу, но будет работать для всего, если вы передадите идентификатор - не уверен, однако, каково значение $edd_options[ 'profile_page' ], если не идентификатор, то проблема в этом. - person doublesharp; 11.04.2013
comment
Я обновил код, чтобы использовать страницу профиля, но $edd_options[ 'profile_page' ] должен быть идентификатором страницы, чтобы он работал. - person doublesharp; 11.04.2013