FlexiTOC – Flexible Table of Contents
·
The table of contents you never have to set up — and never have to fix. Curate it heading by heading; your choices survive every edit.
Install it, and every post that needs a table of contents gets one. That is the whole setup.
FlexiTOC reads the final rendered page — Gutenberg blocks, classic content, shortcode output — finds the headings, gives them stable anchor links, and builds the navigation in one pass. Because the TOC and the anchors come from the same pass, they cannot drift apart: no orphaned links, no “TOC shows a heading I deleted”, no anchors pointing nowhere.
Authors stay in control without ever maintaining a list:
- Every Heading block gets a simple choice — include, exclude, or just follow the site’s level defaults. Force one important H5 into the TOC, or drop a noisy H2 out, without touching global settings.
- Give any heading a shorter TOC-only label (“Getting started with the plugin” can appear as just “Getting started”). The visible heading never changes.
- Manage every heading from one place: the FlexiTOC Headings panel in the editor sidebar lists them all with toggles, labels, search, and bulk actions.
- Choices are stored on the heading itself — rename it, move it, drag it around: your curation survives, because there is nothing to re-match.
One engine, three doors
However you place it, the same engine renders it:
- Automatic – pick position and post types once in Settings. Each post can override the position, or opt out, in the FlexiTOC Display panel.
- Block – put the FlexiTOC block exactly where you want it: in the post, in a sidebar, in a Site Editor template (it follows the post it sits next to, including inside a Query Loop). Sticky, “highlight current section”, and a flat (non-indented) heading hierarchy make it a proper documentation sidebar.
- Shortcode –
[flexitoc]for classic content and page builders.
Looks native, behaves politely
- Inherits your theme’s colors and typography — including dark themes. Three style presets (Default, Boxed, Minimal) plus the native block color, border, spacing and typography controls when you want more.
- Clean, accessible markup: a real
navlandmark, nativedetailscollapsing (no JS),aria-currenton the active link, reduced-motion respected. - Loads nothing on pages without a TOC. The optional scroll-spy script is under 1 KB.
- Never rewrites your stored content — anchors are added at render time with WordPress’s HTML API. Deactivate the plugin and your content is exactly as it was.
- A “Fixed header offset” setting keeps anchors, the sticky block and the section highlight clear of fixed headers.
- Hidden headings (
hidden,aria-hidden) are ignored automatically.
For developers and page builders
- Utility classes work anywhere, on the heading or a wrapper:
flexitoc-include,flexitoc-exclude(orno-toc) on headings or their containers;flexitoc-ignoreon a container to skip everything inside it. - Filters:
flexitoc_headings(the list an instance will show),flexitoc_html(final markup),flexitoc_settings(effective settings). - Existing heading ids are always respected, and generated ids never collide with any id already in the document.
