The My Account page is more customizable than most developers assume and more fragile than most clients expect. This is a tour of the legitimate extension points, what each one costs you in maintenance, and where the ceiling is — the point at which replacing the surface beats patching it.
Layer 1: endpoints
Account sections are endpoints. WooCommerce ships the defaults, and you can add your own:
add_action( 'init', function () {
add_rewrite_endpoint( 'warranty', EP_ROOT | EP_PAGES );
} );
add_filter( 'woocommerce_account_menu_items', function ( $items ) {
$items['warranty'] = 'Warranty';
return $items;
} );
add_action( 'woocommerce_account_warranty_endpoint', function () {
echo do_shortcode( '[warranty_form]' );
} );
Flush permalinks after registering. Endpoint content renders inside the default layout — which is both the feature and the limitation: you inherit the navigation, the styling, and the mobile dropdown behavior.
Layer 2: templates and hooks
The account page renders through templates/myaccount/. Theme overrides work the standard way — copy the template into your theme's woocommerce/myaccount/ directory. Around it runs a dense hook system:
woocommerce_account_content— wraps everything inside the section.woocommerce_account_dashboard— the dashboard widget area.woocommerce_before_account_navigation/woocommerce_after_account_navigation— around the menu.- Per-endpoint actions like
woocommerce_account_orders_endpointfor full takeovers of a section.
Template overrides and hooks are fine for moving furniture: renaming a column, inserting a banner, adding a loyalty block. They are not fine for changing the interaction model — the markup is deeply shaped by the endpoint architecture.
Every template override you ship is a private fork of WooCommerce's UI. Major WooCommerce updates move those templates; your overrides silently drift. Budget for review on every WooCommerce major.
Layer 3: a full replacement surface
There is a third option: keep WooCommerce as the data layer and replace the account presentation entirely. This is the WooAccount approach — the portal reads orders, downloads and addresses through the standard APIs (HPOS-safe, since data access goes through CRUD rather than direct tables), renders its own dense UI at /wooaccount, and absorbs third-party account endpoints into its registry so plugins like shipment trackers keep working.
For developers, the interesting part is the extension contract. The portal exposes its own filters and actions — 17 filters and 8 actions at last count — so custom widgets and routes register through the front door instead of scraping DOM. The customization docs walk a widget from registration to render.
Which layer should you pick?
Rule of thumb: one endpoint or one template tweak → Layer 1–2, cleanly. A client asking for “a customer dashboard like the big stores have” → that's a product, not a patch; evaluate a portal before you build one. The comparison in My Account vs a modern portal is the honest baseline, and the demo runs the real thing — with data resets, so you can try breaking it.