Остановить перенаправление WooCommerce wp-login.php и wp-admin на страницы аккаунта

При простой установке Wordpress подписчик может получить доступ к /wp-login.php, войти в систему и посетить панель управления.

Я обнаружил, что после установки WooCommerce, если подписчик вошел в систему, а затем пытается повторно посетить wp-admin или wp-login.php, он перенаправляется на страницу моей учетной записи, установленную в настройках WooCommerce.

Я задавался вопросом, можно ли как-то удалить эту функцию, поскольку она не подходит для моего сайта.

Любые мысли очень ценятся.

Решение

Я нашел решение и разместил его на этом похожий вопрос


person LauraTheExplorer    schedule 18.01.2018    source источник


Ответы (2)


Вот способ добиться этого для роли пользователя «подписчик»:

// Conditional function code for 'subscriber' User Role
function is_subscriber_user(){
    if( current_user_can('subscriber') ) return true;
    else return false;
 }

// Redirect 'subscriber' User Role to the User edit prodile on WooCommerce's My Account
// So when he get looged or it register too
 add_filter('template_redirect', 'wp_subscriber_my_account_redirect' );
function wp_subscriber_my_account_redirect() {
    if( is_subscriber_user() && is_account_page() )
        wp_redirect( get_edit_profile_url( get_current_user_id() ) );
}

// Prevent automatic woocommerce redirection for 'subscriber' User Role 
add_filter( 'woocommerce_prevent_automatic_wizard_redirect', 'wc_subscriber_auto_redirect', 20, 1 );
function wc_subscriber_auto_redirect( $boolean ) {
    if( is_subscriber_user() )
        $prevent_access = true;
    return $boolean;
}

// Allow 'subscriber' User Role to  view the Dashboard
add_filter( 'woocommerce_prevent_admin_access', 'wc_subscriber_admin_access', 20, 1 );
function wc_subscriber_admin_access( $prevent_access ) {
    if( is_subscriber_user() )
        $prevent_access = false;

    return $prevent_access;
}

// Show admin bar for 'subscriber' User Role
add_filter( 'show_admin_bar', 'wc_subscriber_show_admin_bar', 20, 1 );
function wc_subscriber_show_admin_bar( $show ) {
    if ( is_subscriber_user() )
        $show = true;
    return $show;
}

Код находится в файле function.php активной дочерней темы (или активной темы).

Проверено и работает.

Если вы хотите, чтобы пользователь-подписчик перенаправлялся на панель управления вместо редактирования профиля, вам просто нужно заменить функцию get_edit_profile_url() на get dashboard url()

person LoicTheAztec    schedule 19.01.2018

Вы можете использовать хуки WooCommerce для перенаправления пользователей с разными ролями, см. документацию: https://docs.woocommerce.com/document/introduction-to-hooks-actions-and-filters/

Я просто погуглил «подписчики перенаправления woocommerce», и ваш ответ появился в первом результате :)


Таким образом, вы можете решить проблему своего веб-сайта, используя фильтр крючка Woocommerce woocommerce_login_redirect для перенаправления на нужную страницу в зависимости от роли пользователя.

function wc_custom_user_redirect( $redirect, $user ) {
// Get the first of all the roles assigned to the user
$role = $user->roles[0];
$dashboard = admin_url();
$myaccount = get_permalink( wc_get_page_id( 'myaccount' ) );
if( $role == 'administrator' ) {
    //Redirect administrators to the dashboard
    $redirect = $dashboard;
} elseif ( $role == 'shop-manager' ) {
    //Redirect shop managers to the dashboard
    $redirect = $dashboard;
} elseif ( $role == 'editor' ) {
    //Redirect editors to the dashboard
    $redirect = $dashboard;
} elseif ( $role == 'author' ) {
    //Redirect authors to the dashboard
    $redirect = $dashboard;
} elseif ( $role == 'customer' || $role == 'subscriber' ) {
    //Redirect customers and subscribers to the "My Account" page
    $redirect = $myaccount;
} else {
    //Redirect any other role to the previous visited page or, if not available, to the home
    $redirect = wp_get_referer() ? wp_get_referer() : home_url();
}
return $redirect;
}

add_filter( 'woocommerce_login_redirect', 'wc_custom_user_redirect', 10, 2 );

См. источник: https://gist.github.com/lmartins/28186383883d7c5ec644

person caiovisk    schedule 18.01.2018
comment
Спасибо за это. Я также нашел это и не работает извращенно. Я прошел через код, и хук никогда не вызывается, так как это не вход в woocommerce, а вход в wordpress! - person LauraTheExplorer; 19.01.2018