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_endpoint for 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.

Compatibility tax

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.