停止WooCommerce将wp-login.php和wp-admin重定向到帐户页面

时间:2018-01-18 23:27:41

标签: php wordpress woocommerce account user-roles

使用普通的Wordpress安装,订阅者可以访问/wp-login.php,登录并访问仪表板。

我发现在安装WooCommerce之后,如果订阅者登录然后尝试重新访问wp-admin或wp-login.php,则会将其重定向到WooCommerce设置中设置的my-account页面。

我想知道是否有任何方法可以删除此功能,因为它不适合我的网站。

任何想法都非常感激。

解决方案

我找到了一个解决方案并将其发布在related question

2 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:1)

这是实现"订户"用户角色:

// 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() ...