I am trying to make it so that the url.com/my-account or the shortcode [woocommerce_my_account] displays the orders instead of the dashboard that displays “Hello User (not user)?”.
The only thing I have is for after logging in which redirects to the orders instead of the dashboard, but I then going to the /my-account still displays the dashboard which I don’t want.
The closest code I found that does what I want is…
function woocommerce_orders() { $user_id = get_current_user_id(); if ($user_id == 0) { return do_shortcode('[woocommerce_my_account]'); }else{ ob_start(); wc_get_template( 'myaccount/my-orders.php', array( 'current_user' => get_user_by( 'id', $user_id), 'order_count' => $order_count ) ); return ob_get_clean(); } } add_shortcode('woocommerce_orders', 'woocommerce_orders');
However, if there are no orders placed then it comes out blank(doesn’t display the “No order has been made yet.” with shop button) and the my account nav-sidebar doesn’t show up. Would I have to make a custom page-template for this to add in the woocommerce account nav-sidebar?
Edit: If I use the orders.php instead of my-orders.php then I am able to get the “No order has been made yet.” But still no sidebar-nav
Advertisement
Answer
You could try the following code (that is not perfect as it removes the access to the dashboard):
add_action( 'woocommerce_account_content', 'remove_dashboard_account_default', 5 ); function remove_dashboard_account_default() { remove_action( 'woocommerce_account_content', 'woocommerce_account_content', 10 ); add_action( 'woocommerce_account_content', 'custom_account_orders', 10 ); } function custom_account_orders( $current_page ) { global $wp; if ( ! empty( $wp->query_vars ) ) { foreach ( $wp->query_vars as $key => $value ) { // Ignore pagename param. if ( 'pagename' === $key ) { continue; } if ( has_action( 'woocommerce_account_' . $key . '_endpoint' ) ) { do_action( 'woocommerce_account_' . $key . '_endpoint', $value ); return; } } } $current_page = empty( $current_page ) ? 1 : absint( $current_page ); $customer_orders = wc_get_orders( apply_filters( 'woocommerce_my_account_my_orders_query', array( 'customer' => get_current_user_id(), 'page' => $current_page, 'paginate' => true, ) ) ); wc_get_template( 'myaccount/orders.php', array( 'current_page' => absint( $current_page ), 'customer_orders' => $customer_orders, 'has_orders' => 0 < $customer_orders->total, ) ); }
Code goes in function.php file of your active child theme (or active theme). Tested and work.