AltaiR-05
@AltaiR-05

Как в woocommerce при входе в личный кабинет вместо консоли открыть страницу редактирования аккаунта?

Доброго времени суток. При открытии страницы Мой аккаунт WooCommerce открывают Консоль (dashboard.php). Можно ли вместо этого сделать так чтобы открывалась страница редактирования аккаунта edit-account ?
  • Вопрос задан
  • 8226 просмотров
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
По умолчанию при открытии страницы My Account в WooCommerce, если пользователь не авторизован, ему предлагается Login / Register. После входа остается тот же url, та же страница My Account, но уже с личными данными - Dashboard (но не Dashboard админки WordPress). Урл по умолчанию там /my-account/, а не dashboard.php.

Что касается переадресации на /my-account/edit-account/, то делается она так:
function woo_login_redirect( $redirect_to ) {

     $redirect_to = wc_customer_edit_account_url();
     return $redirect_to;

}
add_filter( 'woocommerce_login_redirect', 'woo_login_redirect' );

PS: Люди, не усложняйте. Всегда, в первую очередь проверяйте возможности движка (в данном случае - в порядке WooCommerce, потом сам WordPress) и не городите костыли. Ведь вполне логично предположить, что у WooCommerce, который натыкан хуками под завязку, есть свой хук на редирект после логина, простой поиск по документации вам его и выдаст. То же касается получения стандартного endpoint вукоммерса - вполне разумно предположить, что у Woo есть хелперы для получения стандартных урл, например wc_customer_edit_account_url(). При таком подходе вы получаете надежное решение, которое не перестанет работать, если клиент в админке отредактирует slug эндпоинта личного кабинета, или какой-то плагин его подменит.

UPDATE 2018: Код можно немного сократить и упростить, поскольку редирект у нас всегда принудительный и дополнительных проверок не предвидится:
/**
 * Always redirect user to "Edit Account" page after login.
 * 
 * @return string Target URL
 */
function woo_login_redirect()
{
	return wc_customer_edit_account_url();
}
add_filter( 'woocommerce_login_redirect', 'woo_login_redirect' );


Если не предполагается вставлять это в публичную тему или предоставлять возможность другим отключить данный фильтр, можно записать в виде closure:

/**
 * Always redirect user to "Edit Account" page after login.
 * 
 * @return string Target URL
 */
add_filter( 'woocommerce_login_redirect', function() {
    return wc_customer_edit_account_url();
} );
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
trampick
@trampick
Веб-разработчик
Например так:
function new_dashboard_home($username, $user){
    if(array_key_exists('administrator', $user->caps)){
        wp_redirect(admin_url('admin.php, 'http'), 301);
        exit;
    }
}
add_action('wp_login', 'new_dashboard_home', 10, 2);

или так:
function loginRedirect( $redirect_to, $request, $user ){
    if( is_array( $user->roles ) ) { 
        return "/wp-admin/edit.php?post_type=page";
    }
}
add_filter("login_redirect", "loginRedirect", 10, 3);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы