{"id":299247,"date":"2026-04-28T17:12:09","date_gmt":"2026-04-28T17:12:09","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tidy-toc-fast-table-of-contents\/"},"modified":"2026-05-21T12:11:51","modified_gmt":"2026-05-21T12:11:51","slug":"tidy-table-of-contents","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/tidy-table-of-contents\/","author":23467890,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.8","stable_tag":"1.0.8","tested":"7.0","requires":"6.0","requires_php":"8.2","requires_plugins":null,"header_name":"Tidy Table of Contents","header_author":"Pierre","header_description":"Automatic, accessible, and performant table of contents for WordPress.","assets_banners_color":"7a39c6","last_updated":"2026-05-21 12:11:51","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/tidy-table-of-contents\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":114,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.7":{"tag":"1.0.7","author":"pierreferrolliet","date":"2026-04-28 17:11:47"},"1.0.8":{"tag":"1.0.8","author":"pierreferrolliet","date":"2026-05-21 12:11:51"}},"upgrade_notice":{"1.0.7":"<p>Collapse now closes fully on every theme \u2014 replaced grid trick with max-height.<\/p>","1.0.6":"<p>Collapse animation now closes fully \u2014 no more residual padding strip under the header.<\/p>","1.0.5":"<p>TOC items now follow the theme&#039;s typography. The SOMMAIRE title is slightly larger for better hierarchy.<\/p>","1.0.4":"<p>Fix: the toggle no longer adopts theme button styling, and TOC items keep a sensible size in sidebars and nav contexts.<\/p>","1.0.3":"<p>New installs get &quot;After first paragraph&quot; as default insertion position. Font sizes now inherit from the active theme.<\/p>","1.0.2":"<p>The free plugin no longer ships any code for premium-only features (sticky, custom theme, reading time). No user-facing change unless you were using the companion Pro add-on.<\/p>","1.0.1":"<p>Code cleanup and security hardening. No user-facing changes.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3543746,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3543746,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3543746,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3543746,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"tidy-toc\/table-of-contents":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"tidy-toc\/table-of-contents","version":"1.0.0","title":"Table of Contents","category":"widgets","icon":"list-view","description":"Display an automatic table of contents generated from your headings.","keywords":["toc","table of contents","navigation","headings","tidy toc"],"supports":{"html":false,"multiple":false,"align":["wide","full"]},"textdomain":"tidy-table-of-contents","editorScript":"file:.\/editor.js","render":"file:.\/render.php"}},"tagged_versions":["1.0.7","1.0.8"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3543746,"resolution":"1","location":"assets","locale":"","width":1354,"height":436},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3543746,"resolution":"2","location":"assets","locale":"","width":2880,"height":2900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3543746,"resolution":"3","location":"assets","locale":"","width":560,"height":608}},"screenshots":{"1":"TOC displayed in a post","2":"Settings page","3":"Per-post meta box"}},"plugin_section":[],"plugin_tags":[19897,1753,186,10851,10852],"plugin_category":[43,55],"plugin_contributors":[259182],"plugin_business_model":[],"class_list":["post-299247","plugin","type-plugin","status-publish","hentry","plugin_tags-headings","plugin_tags-navigation","plugin_tags-seo","plugin_tags-table-of-contents","plugin_tags-toc","plugin_category-customization","plugin_category-seo-and-marketing","plugin_contributors-pierreferrolliet","plugin_committers-pierreferrolliet"],"banners":{"banner":"https:\/\/ps.w.org\/tidy-table-of-contents\/assets\/banner-772x250.png?rev=3543746","banner_2x":"https:\/\/ps.w.org\/tidy-table-of-contents\/assets\/banner-1544x500.png?rev=3543746","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tidy-table-of-contents\/assets\/icon-128x128.png?rev=3543746","icon_2x":"https:\/\/ps.w.org\/tidy-table-of-contents\/assets\/icon-256x256.png?rev=3543746","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tidy-table-of-contents\/assets\/screenshot-1.png?rev=3543746","caption":"TOC displayed in a post"},{"src":"https:\/\/ps.w.org\/tidy-table-of-contents\/assets\/screenshot-2.png?rev=3543746","caption":"Settings page"},{"src":"https:\/\/ps.w.org\/tidy-table-of-contents\/assets\/screenshot-3.png?rev=3543746","caption":"Per-post meta box"}],"raw_content":"<!--section=description-->\n<p>Tidy Table of Contents automatically generates a clean, accessible table of contents from your headings. It works out of the box with no configuration, and offers deep customization when you need it.<\/p>\n\n<p><strong>Key features:<\/strong><\/p>\n\n<ul>\n<li>\ud83e\udd16 <strong>Automatic<\/strong> \u2014 parses H2\u2013H6 headings and generates the TOC instantly<\/li>\n<li>\u267f <strong>Accessible<\/strong> \u2014 proper ARIA roles, keyboard navigation<\/li>\n<li>\u26a1 <strong>Performant<\/strong> \u2014 output cached per post, no render-blocking JS<\/li>\n<li>\ud83c\udfa8 <strong>Customizable<\/strong> \u2014 configure depth, position, title, open\/collapsed state<\/li>\n<li>\ud83d\udccc <strong>Per-post control<\/strong> \u2014 override global settings via meta box<\/li>\n<li>\ud83d\udd17 <strong>Smooth scroll<\/strong> \u2014 animated anchor navigation<\/li>\n<li>\ud83d\udcf1 <strong>Responsive<\/strong> \u2014 collapsible on mobile<\/li>\n<li>\ud83e\udde9 <strong>Shortcode<\/strong> \u2014 <code>[tidy_toc]<\/code> for manual placement<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>tidy-table-of-contents<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress<\/li>\n<li>The TOC will appear automatically above the first H2 heading in your posts<\/li>\n<li>Configure global defaults under <strong>Settings \u2192 Tidy TOC<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20heading%20levels%20are%20included%3F\"><h3>Which heading levels are included?<\/h3><\/dt>\n<dd><p>By default H2 and H3. You can configure the minimum and maximum heading depth in the settings.<\/p><\/dd>\n<dt id=\"can%20i%20disable%20the%20toc%20for%20a%20specific%20post%3F\"><h3>Can I disable the TOC for a specific post?<\/h3><\/dt>\n<dd><p>Yes. Each post has a meta box where you can disable the TOC or override global settings.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20block%20editor%3F\"><h3>Does it work with the block editor?<\/h3><\/dt>\n<dd><p>Yes. The TOC is generated server-side from the rendered post content, so it works regardless of how the post was written.<\/p><\/dd>\n<dt id=\"does%20it%20slow%20down%20my%20site%3F\"><h3>Does it slow down my site?<\/h3><\/dt>\n<dd><p>No. The TOC output is cached per post and invalidated automatically when the post is updated.<\/p><\/dd>\n<dt id=\"can%20i%20place%20the%20toc%20manually%3F\"><h3>Can I place the TOC manually?<\/h3><\/dt>\n<dd><p>Yes. Use the <code>[tidy_toc]<\/code> shortcode anywhere in your content, or disable auto-insertion in the settings.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Declared compatibility with WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Replaced the grid-template-rows collapse trick with a max-height transition. The grid trick would refuse to fully collapse in some themes, leaving a residual strip with the first row of items partially visible. max-height: 0 hides the body cleanly.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fixed the collapsed state leaving a visible padding strip under the header. The body wrapper is now <code>box-sizing: border-box<\/code> so its padding is included in the collapsed height (full collapse, no leftover band).<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>TOC item sizes inherit from the active theme again (reverts the explicit <code>rem<\/code> fallback added in 1.0.4).<\/li>\n<li>Title bumped to 1.25rem so the SOMMAIRE label stays clearly readable as a header above inherited link sizes.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed the toggle button picking up theme button styles (coloured background, padding, hover gradient) \u2014 the \"Table of Contents\" header now reliably renders as a plain text label across themes.<\/li>\n<li>Hardened TOC item font sizes against context shrinkers (sidebar, nav, .entry-content ul). Sizes are now expressed in <code>rem<\/code> so they track the theme's root font size while staying isolated from nested overrides.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Default insertion position is now \"After first paragraph\" (was \"Before content\") \u2014 better reading flow on a fresh install.<\/li>\n<li>Removed hardcoded font sizes from the front-end stylesheet (base, title, H2\/H3\/H4 link sizes). The TOC now inherits typography from the active theme.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Removed all rendering code for premium-only features (sticky positioning, \"custom\" theme with color\/radius\/border options, reading-time badge). The free plugin now exposes only the three documented free themes (Minimal, Card, Outline) \u2014 no hidden capabilities behind add-on hooks.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Removed all licence checks and premium-feature gating from the free plugin code (premium features are now distributed via a separate companion plugin).<\/li>\n<li>Hardened JSON-LD output with JSON_HEX_* flags to prevent script-tag breakouts.<\/li>\n<li>Removed the now-unnecessary <code>load_plugin_textdomain()<\/code> call (handled by WordPress.org translation system since WP 4.6).<\/li>\n<li>Added extension hooks for add-on plugins (settings defaults\/sanitisation, render options, shortcode atts\/headings, settings page, admin\/front localized data, plugin row links).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release \u2014 automatic TOC generation, caching, accessibility, per-post control.<\/li>\n<\/ul>","raw_excerpt":"Automatic, accessible and performant table of contents for WordPress. Zero configuration needed.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/299247","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=299247"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pierreferrolliet"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=299247"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=299247"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=299247"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=299247"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=299247"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=299247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}