为登录用户显示订单而不是WooCommerce我的帐户仪表板

时间:2018-04-22 作者:rok

有以下内容的页面:登录/注册/密码丢失/密码重置。

成功注册或登录后,由于以下原因,用户将被重定向:

function redirect_to_orders_after_login( $redirect, $user ) {  
    $redirect=site_url(\'/my-account/orders/\'));
    return $redirect ;
}

add_filter( \'woocommerce_login_redirect\', \'redirect_to_orders_after_login\', 10, 2 );
由于以下代码,仪表板菜单项被隐藏:

function custom_my_account_menu_items( $items ) {
  $items = array(
      \'orders\'    => __( \'Orders\', \'woocommerce\' ),
      \'edit-account\'      => __( \'Edit account details\', \'woocommerce\' )
  );
  return $items;
}

add_filter( \'woocommerce_account_menu_items\', \'custom_my_account_menu_items\' );
但是,如果登录用户访问了site\\uURL/login和其他上述url,则仍会显示我的帐户仪表板。

我尝试使用以下代码,但不相信它涵盖了所有情况,因为访问site\\u url/我的帐户/丢失的密码仍然会重定向到仪表板:

add_action(\'init\', function() {
  $url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), \'/\');
  if ( is_user_logged_in() && ($url_path == \'login\' | $url_path == \'register\' | $url_path == \'lost-password\' | $url_path == \'reset-password\') ) {     
     wp_redirect( site_url(\'/my-account/orders/\') );
     exit(); 
  }
});
也许,覆盖仪表板。php,代码按顺序排列。php中的子主题是解决方案吗?

如何正确地将用户重定向到我的帐户/订单,并隐藏仪表板,使其无法访问和查看?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

如何将用户正确重定向到我的帐户/订单

尝试以下操作:

add_action( \'parse_request\', \'redirect_to_my_account_orders\' );
function redirect_to_my_account_orders( $wp ) {
    // All other endpoints such as change-password will redirect to
    // my-account/orders
    $allowed_endpoints = [ \'orders\', \'edit-account\', \'customer-logout\' ];

    if (
        is_user_logged_in() &&
        preg_match( \'%^my\\-account(?:/([^/]+)|)/?$%\', $wp->request, $m ) &&
        ( empty( $m[1] ) || ! in_array( $m[1], $allowed_endpoints ) )
    ) {
        wp_redirect( \'/my-account/orders/\' );
        exit;
    }
}

结束

相关推荐