NextDashNextDash
Back to blog
TutorialsSep 19, 2026 · 3 min read

How to Customize the WooCommerce My Account Orders Table

Add or remove columns and row actions in the WooCommerce My Account orders table with working PHP filter examples.

NextDash orders screen with status, items, and payment method columns

Two filters control everything about the orders table's structure: which columns appear, and which action buttons show on each row. Both requests we hear most often - "add a tracking column," "add a reorder button" - come down to using these correctly. If you'd rather not maintain custom filters as your needs grow, our order management dashboard spotlight covers what search, filtering, and status visibility look like built in instead.

The two filters

woocommerce_my_account_my_orders_columns controls the table's columns. woocommerce_my_account_my_orders_actions controls the row action buttons (the links/buttons shown per order, like "View" or "Pay"). Both are simple array filters - add, remove, or reorder keys to change what renders.

Adding a "Tracking" column

add_filter( 'woocommerce_my_account_my_orders_columns', function ( $columns ) {
    $columns['order-tracking'] = __( 'Tracking', 'your-textdomain' );
    return $columns;
} );

add_action( 'woocommerce_my_account_my_orders_column_order-tracking', function ( $order ) {
    $tracking_number = $order->get_meta( '_tracking_number' );

    if ( $tracking_number ) {
        echo esc_html( $tracking_number );
    } else {
        echo '—';
    }
} );

The column key (order-tracking) has to match between the filter that registers the column and the action hook name (woocommerce_my_account_my_orders_column_{key}) that renders its content - the same key-matching requirement covered for menu items in our custom tab tutorial. This example assumes a _tracking_number order meta field exists; adjust to match however your store actually stores tracking data.

Adding a "Reorder" action button

add_filter( 'woocommerce_my_account_my_orders_actions', function ( $actions, $order ) {
    if ( $order->has_status( [ 'completed' ] ) ) {
        $actions['reorder'] = [
            'url'  => wp_nonce_url(
                add_query_arg( 'reorder', $order->get_id() ),
                'woocommerce-reorder'
            ),
            'name' => __( 'Reorder', 'your-textdomain' ),
        ];
    }
    return $actions;
}, 10, 2 );

Restricting this to completed orders keeps a reorder link from showing on orders still processing or already refunded, where it wouldn't make sense. The URL handling that actually adds those items back to the cart is a separate piece - a template_redirect hook checking for the reorder query arg and nonce - not shown here since it's standard cart-manipulation code rather than anything orders-table-specific.

Removing a default column

Less common, but sometimes wanted - hiding the "Total" column for a subscription-only store where every order is the same recurring amount, for example:

add_filter( 'woocommerce_my_account_my_orders_columns', function ( $columns ) {
    unset( $columns['order-total'] );
    return $columns;
} );

Styling the table responsively for mobile

Adding columns makes an already-wide table wider, which makes mobile responsiveness matter more, not less. See our CSS styling guide for the exact recipe that collapses this table into mobile-friendly cards

  • it works the same way regardless of how many columns you've added, since it keys off each cell's data-title attribute rather than a fixed column count.

FAQ

Do I need to touch the table's HTML/template file to add a column? No - both filters shown here work without any template override. Reach for a template override only if you need to change the table's structure beyond adding/removing/reordering columns and actions.

Will these customizations survive a WooCommerce update? Yes - these are standard filter hooks, not template overrides, so they carry the same update-safety as any other hook-based customization covered elsewhere in this series.

Can I reorder existing columns, not just add new ones? Yes - since woocommerce_my_account_my_orders_columns returns a plain array, you can unset and re-add keys in whatever order you want them to appear, the same technique used for menu reordering in our customization guide.

Skip the custom code — install NextDash

NextDash replaces the default WooCommerce My Account page with a modern React dashboard out of the box: order management, downloads, addresses, dark mode, and fast client-side navigation, no template overrides required.

woocommercemy-accountorderswordpress

Keep reading