{"id":363186,"date":"2026-09-23T17:48:08","date_gmt":"2026-09-23T17:48:08","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tocflow\/"},"modified":"2026-09-23T21:11:06","modified_gmt":"2026-09-23T21:11:06","slug":"tocguide","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/tocguide\/","author":15504160,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.6.3","stable_tag":"1.6.3","tested":"7.1.2","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"TOCguide","header_author":"Matt Hummel","header_description":"A lightweight Table of Contents block that auto-generates a linked outline from your post headings. Independent plugin by Matt Hummel \u2014 not affiliated with any other product.","assets_banners_color":"2d6a4b","last_updated":"2026-09-23 21:11:06","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/matthummel.com","header_plugin_uri":"https:\/\/github.com\/matthummel-pa\/tocguide","header_author_uri":"https:\/\/matthummel.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":82,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.5.0":{"tag":"1.5.0","author":"matthummel","date":"2026-09-23 17:47:46","revision":3709895},"1.6.2":{"tag":"1.6.2","author":"matthummel","date":"2026-09-23 19:33:13","revision":3710054},"1.6.3":{"tag":"1.6.3","author":"matthummel","date":"2026-09-23 21:11:06","revision":3710176}},"upgrade_notice":{"1.5.0":"<p>One <code>tocguide<\/code> identity for PHP, CSS, the block, shortcode, and settings. Re-insert the Table of Contents block and re-save Settings if you used an earlier zip.<\/p>","1.4.0":"<p>Display name and WordPress.org slug are now TOCguide \/ tocguide so the listing is clearly independent. Existing blocks and CSS from that release kept working.<\/p>","1.3.3":"<p>Bug fix: custom background and font colours set in Settings \u2192 TOCguide now display correctly. The accessibility focus-ring setting also now applies as intended.<\/p>","1.3.2":"<p>Readme-only fix: short description trimmed to satisfy the WordPress.org 150-character parser limit.<\/p>","1.3.1":"<p>Security\/code-quality fix: escaping error in the settings colour-picker widget resolved. No functional changes.<\/p>","1.3.0":"<p>Major settings expansion: global design customization (colours, typography, borders), Reading Guide &amp; Study Tools defaults, and a new Accessibility section for focus ring styles. No changes to existing block output.<\/p>","1.2.2":"<p>WordPress.org compliance fixes: corrects the in-admin version badge, updates &quot;Tested up to&quot; to 7.1, and removes a disallowed trademark tag. No functional changes.<\/p>","1.2.1":"<p>Performance fix for the resume bookmark feature (debounced localStorage writes). Documentation updates only \u2014 no functional changes to the block, shortcode, or settings.<\/p>","1.2.0":"<p>Adds study-assistant features: reader note pads, a reading progress bar, resume bookmark, Section Planner writing status, and a total read-time badge. No breaking changes \u2014 all new features are opt-in via the block sidebar or shortcode.<\/p>","1.1.0":"<p>Adds Reading Guide mode: section previews, density bars, read-time estimates, reading progress, author notes, emoji reactions, and per-section academic citations. No breaking changes \u2014 all new features are opt-in via the block sidebar.<\/p>","1.0.2":"<p>Plugin Check and readme cleanup for the WordPress.org review. Same block, settings, and shortcode as 1.0.1.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3709895,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3709895,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3709895,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3710054,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3710054,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"tocguide\/table-of-contents":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"tocguide\/table-of-contents","version":"1.6.3","title":"Table of Contents","category":"widgets","icon":"list-view","description":"Automatically generate a clean, linked table of contents from your post's headings.","keywords":["toc","table of contents","navigation","outline","anchor","headings"],"textdomain":"tocguide","usesContext":["postId","postType"],"supports":{"html":false,"anchor":true,"align":["wide","full"],"className":true,"customClassName":true,"color":{"background":true,"text":true,"link":true,"__experimentalDefaultControls":{"background":true,"text":true,"link":true}},"spacing":{"padding":true,"margin":true,"__experimentalDefaultControls":{"padding":true}},"typography":{"fontSize":true,"lineHeight":true,"__experimentalDefaultControls":{"fontSize":true}},"border":{"color":true,"radius":true,"width":true,"style":true}},"selectors":{"root":".wp-block-tocguide-table-of-contents","color":{"text":".wp-block-tocguide-table-of-contents","link":".wp-block-tocguide-table-of-contents a"}},"styles":[{"name":"default","label":"Default","isDefault":true},{"name":"minimal","label":"Minimal"},{"name":"boxed","label":"Boxed"},{"name":"underline","label":"Underline"},{"name":"card","label":"Card"}],"attributes":{"title":{"type":"string","default":"Table of Contents","role":"content"},"showTitle":{"type":"boolean","default":true},"titleTag":{"type":"string","default":"p"},"showH1":{"type":"boolean","default":false},"showH2":{"type":"boolean","default":true},"showH3":{"type":"boolean","default":true},"showH4":{"type":"boolean","default":false},"showH5":{"type":"boolean","default":false},"showH6":{"type":"boolean","default":false},"ordered":{"type":"boolean","default":false},"numbering":{"type":"string","default":"default"},"hideMarkers":{"type":"boolean","default":false},"excludeThemeStyles":{"type":"string","default":"inherit","role":"local"},"collapsible":{"type":"boolean","default":false},"collapsedDefault":{"type":"boolean","default":false},"sticky":{"type":"boolean","default":false},"compact":{"type":"boolean","default":false},"twoColumns":{"type":"boolean","default":false},"underlineLinks":{"type":"boolean","default":false},"highlightActive":{"type":"boolean","default":true},"maxHeight":{"type":"number","default":0},"minHeadings":{"type":"number","default":-1,"role":"local"},"smoothScroll":{"type":"string","default":"inherit","role":"local"},"stylePreset":{"type":"string","default":"default","role":"local"},"scrollOffset":{"type":"number","default":-1,"role":"local"},"previewOnHover":{"type":"boolean","default":false},"guideMode":{"type":"boolean","default":false},"showPreviews":{"type":"boolean","default":true},"showDensity":{"type":"boolean","default":true},"showReadTime":{"type":"boolean","default":true},"trackProgress":{"type":"boolean","default":true},"showReactions":{"type":"boolean","default":false},"showCitations":{"type":"boolean","default":false},"citationStyle":{"type":"string","default":"apa"},"sectionNotes":{"type":"object","default":{}},"sectionStatus":{"type":"object","default":{}},"showExport":{"type":"boolean","default":false},"showReaderNotes":{"type":"boolean","default":false},"showReadingProgress":{"type":"boolean","default":false},"showBookmark":{"type":"boolean","default":false}},"example":{"attributes":{"title":"Table of Contents"},"viewportWidth":420},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScript":"file:.\/view.js","render":"file:.\/render.php"}},"tagged_versions":["1.5.0","1.6.2","1.6.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3710054,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3710054,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3710054,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3710054,"resolution":"4","location":"assets","locale":"","width":1280,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3710054,"resolution":"5","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"Front-end Table of Contents with optional Reading Guide (previews, density, read time).","2":"Settings \u2192 TOCguide: auto-insert, design tokens, study tools, accessibility.","3":"Block sidebar in the editor (heading levels, layout, Reading Guide).","4":"Docs &amp; Support tab in wp-admin (links to the documentation site).","5":"Settings \u2192 TOCguide \u2192 Design: colours, fonts, markers, and the live outline preview."}},"plugin_section":[],"plugin_tags":[1220,258607,282332,10851,10852],"plugin_category":[],"plugin_contributors":[282333],"plugin_business_model":[],"class_list":["post-363186","plugin","type-plugin","status-publish","hentry","plugin_tags-block","plugin_tags-reading-guide","plugin_tags-study-tools","plugin_tags-table-of-contents","plugin_tags-toc","plugin_contributors-matthummel","plugin_committers-matthummel"],"banners":{"banner":"https:\/\/ps.w.org\/tocguide\/assets\/banner-772x250.png?rev=3710054","banner_2x":"https:\/\/ps.w.org\/tocguide\/assets\/banner-1544x500.png?rev=3710054","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/tocguide\/assets\/icon.svg?rev=3709895","icon":"https:\/\/ps.w.org\/tocguide\/assets\/icon.svg?rev=3709895","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tocguide\/assets\/screenshot-1.png?rev=3710054","caption":"Front-end Table of Contents with optional Reading Guide (previews, density, read time)."},{"src":"https:\/\/ps.w.org\/tocguide\/assets\/screenshot-2.png?rev=3710054","caption":"Settings \u2192 TOCguide: auto-insert, design tokens, study tools, accessibility."},{"src":"https:\/\/ps.w.org\/tocguide\/assets\/screenshot-3.png?rev=3710054","caption":"Block sidebar in the editor (heading levels, layout, Reading Guide)."},{"src":"https:\/\/ps.w.org\/tocguide\/assets\/screenshot-4.png?rev=3710054","caption":"Docs &amp; Support tab in wp-admin (links to the documentation site)."},{"src":"https:\/\/ps.w.org\/tocguide\/assets\/screenshot-5.png?rev=3710054","caption":"Settings \u2192 TOCguide \u2192 Design: colours, fonts, markers, and the live outline preview."}],"raw_content":"<!--section=description-->\n<p>TOCguide adds a Table of Contents block to the WordPress block editor. It is an independent plugin by Matt Hummel and is not affiliated with any other company or plugin. Optional <strong>Reading Guide<\/strong> mode turns the outline into a reading companion (section previews, read time, progress). Every feature is rendered server-side or handled in the browser with no external API calls, no accounts, and no tracking.<\/p>\n\n<h4>Standard TOC features<\/h4>\n\n<ul>\n<li>Standard Gutenberg block (<code>block.json<\/code>, live editor preview, Block Styles)<\/li>\n<li>Choose H1\u2013H6 heading levels<\/li>\n<li>Numbered or bulleted lists, including nested 1.1.1 numbering<\/li>\n<li>Five style presets: Default, Minimal, Boxed, Underline, Card<\/li>\n<li>Show or hide the title; render it as a paragraph or H2\u2013H4<\/li>\n<li>Smooth scroll with a configurable offset for sticky headers<\/li>\n<li>Collapsible outline and optional sticky positioning<\/li>\n<li>Scroll-spy highlights the section currently in view<\/li>\n<li>Hide bullets, two-column layout, compact spacing, max height with scroll<\/li>\n<li>Auto-generate the block sitewide (top of content or after first heading)<\/li>\n<li><code>[tocguide]<\/code> shortcode for classic content and theme templates<\/li>\n<li>Skip a heading with the CSS class <code>no-toc<\/code><\/li>\n<li>Accessible <code>&lt;nav&gt;<\/code> landmark with ARIA labels<\/li>\n<li>Optional ItemList JSON-LD schema markup<\/li>\n<li>No account, no external API calls, no tracking<\/li>\n<\/ul>\n\n<h4>Reading Guide mode<\/h4>\n\n<p>Enable <strong>Reading Guide<\/strong> in the block sidebar to transform the TOC into a live reading companion. Every enrichment is computed from your block content \u2014 no JavaScript fetches, no third-party services.<\/p>\n\n<p><strong>Section content previews<\/strong> \u2014 The opening sentence of every section appears beneath its TOC link, extracted server-side from your block content. Readers scan the outline and know exactly what they are about to read before they click.<\/p>\n\n<p><strong>Content density bars<\/strong> \u2014 A subtle bar under each item shows that section's word count as a proportion of the longest section. Readers see at a glance which sections are brief and which are deep dives.<\/p>\n\n<p><strong>Per-section read-time estimates<\/strong> \u2014 Word count divided by average reading speed gives a <code>~N min<\/code> badge next to each link. Readers can decide what to read and how long it will take.<\/p>\n\n<p><strong>Reading progress<\/strong> \u2014 As a reader scrolls past each section, its TOC item fades out. The outline becomes a live checklist of what has been read and what remains.<\/p>\n\n<p><strong>Author section notes<\/strong> \u2014 Write a short teaser or hook for any section directly in the block editor's Section Notes panel. Readers reveal it with a single tap (\u270d button). The note is stored in block attributes \u2014 no database round-trip.<\/p>\n\n<p><strong>Emoji reactions<\/strong> \u2014 Readers react to individual sections (\ud83d\udca1 Insightful \u00b7 \u2b50 Saved \u00b7 \ud83e\udd14 Unclear \u00b7 \u2705 Got it) with a single click. Choices are stored in the browser's localStorage. No accounts, no server calls, no tracking.<\/p>\n\n<p><strong>Per-section academic citations<\/strong> \u2014 A \u00a7 button on each TOC item copies a fully formatted academic citation for that specific section. Five formats supported: APA, MLA, Chicago, Harvard, and plain link. Citation data comes entirely from WordPress post meta (author, title, site name, published date, permalink). Ideal for research blogs, documentation sites, and long-form journalism.<\/p>\n\n<h4>Compatibility<\/h4>\n\n<p>TOCguide is designed to work with every major WordPress stack:<\/p>\n\n<ul>\n<li><strong>Theme builders:<\/strong> Gutenberg (native block), Elementor, Divi, Beaver Builder, Bricks Builder, WPBakery, Oxygen, Breakdance \u2014 use <code>[tocguide]<\/code> in any shortcode\/HTML element.<\/li>\n<li><strong>SEO plugins:<\/strong> Yoast SEO, Rank Math, All in One SEO, SEOPress \u2014 schema markup is opt-in and off by default; no conflicts with any SEO plugin's TOC schema output.<\/li>\n<li><strong>Themes:<\/strong> Works with any theme \u2014 inherits theme fonts and colors; no injected brand styles; tested on Twenty Twenty-Four, Twenty Twenty-Five, Astra, Kadence, GeneratePress, Blocksy.<\/li>\n<li><strong>Multilingual:<\/strong> WPML, Polylang, TranslatePress \u2014 fully translation-ready with the standard <code>tocguide<\/code> text domain.<\/li>\n<li><strong>PHP:<\/strong> 7.4, 8.0, 8.1, 8.2, 8.3.<\/li>\n<li><strong>WordPress:<\/strong> 6.4 \u2013 7.1 (tested on all major releases in this range).<\/li>\n<\/ul>\n\n<h4>Source and development<\/h4>\n\n<p>Unminified JavaScript and SCSS ship in <code>src\/<\/code>. Compiled assets are in <code>build\/<\/code>. From the GitHub repo: <code>npm install &amp;&amp; npm run build<\/code>. Node 20+ (see <code>.nvmrc<\/code>). PHP coding standards: <code>composer install &amp;&amp; composer phpcs<\/code>.<\/p>\n\n<p>This plugin does <strong>not<\/strong> load JavaScript or CSS from a third-party CDN. Front-end assets are enqueued from files inside the plugin. The GitHub Pages marketing site may load a webfont; that is not part of the plugin zip.<\/p>\n\n<h4>Third-party services<\/h4>\n\n<p>None. TOCguide does not call remote APIs, does not require an account, and does not send data off-site. Details: https:\/\/github.com\/matthummel-pa\/tocguide\/blob\/main\/PRIVACY.md<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>No personal data collection, no marketing cookies, no phone-home. Settings live in the <code>tocguide_settings<\/code> option. Uninstall deletes data only if you opted in under Settings \u2192 TOCguide. Deactivate does not delete settings. Optional JSON-LD is off by default. Study tools that use <code>localStorage<\/code> stay on the visitor's device.<\/p>\n\n<h4>Credits on the front end<\/h4>\n\n<p>TOCguide does not print a \u201cpowered by\u201d or credit link on published posts.<\/p>\n\n<h4>How to use<\/h4>\n\n<ol>\n<li>Edit a post that contains Heading blocks.<\/li>\n<li>Insert the <strong>Table of Contents<\/strong> block (typically after the introduction).<\/li>\n<li>Optionally open the <strong>Reading Guide<\/strong> panel in the block sidebar to enable any of the reading companion features.<\/li>\n<li>Open <strong>Settings \u2192 TOCguide<\/strong> to auto-generate the block sitewide or set a scroll offset.<\/li>\n<\/ol>\n\n<h4>Shortcode<\/h4>\n\n<pre><code>[tocguide]\n<\/code><\/pre>\n\n<p>Layout &amp; behavior: <code>title<\/code>, <code>showtitle<\/code>, <code>titletag<\/code>, <code>h1<\/code>\u2013<code>h6<\/code>, <code>ordered<\/code>, <code>numbering<\/code>, <code>markers<\/code>, <code>collapsible<\/code>, <code>collapsed<\/code>, <code>sticky<\/code>, <code>compact<\/code>, <code>columns<\/code>, <code>underline<\/code>, <code>highlight<\/code>, <code>maxheight<\/code>, <code>min<\/code>, <code>smooth<\/code>, <code>style<\/code>.<\/p>\n\n<p>Reading Guide: <code>preview=\"1\"<\/code> (hover tooltip on links), <code>guide=\"1\"<\/code> (full Reading Guide mode), <code>previews=\"1\"<\/code>, <code>density=\"1\"<\/code>, <code>readtime=\"1\"<\/code>, <code>progress=\"1\"<\/code>, <code>reactions=\"1\"<\/code>, <code>citations=\"1\"<\/code>, <code>citation=\"apa|mla|chicago|harvard|plain\"<\/code>.<\/p>\n\n<p>Study assistant: <code>rprogress=\"1\"<\/code> (document progress bar), <code>bookmark=\"1\"<\/code> (resume last heading), <code>rnotes=\"1\"<\/code> (private reader note pads).<\/p>\n\n<p>Examples:<\/p>\n\n<pre><code>[tocguide title=\"On this page\" style=\"boxed\" preview=\"1\"]\n\n[tocguide guide=\"1\" previews=\"1\" readtime=\"1\" reactions=\"1\" citations=\"1\"]\n<\/code><\/pre>\n\n<h4>Skip a heading<\/h4>\n\n<p>Add the CSS class <code>no-toc<\/code> or <code>tocguide-skip<\/code> to a Heading block (Advanced \u2192 Additional CSS class(es)).<\/p>\n\n<h4>Support<\/h4>\n\n<p>Documentation and support: https:\/\/matthummel-pa.github.io\/tocguide\/\nIssues: https:\/\/github.com\/matthummel-pa\/tocguide\/issues<\/p>\n\n<h3>License<\/h3>\n\n<p>TOCguide is copyright 2026 Matt Hummel and licensed under the GNU General Public License, version 2 or later. That license covers the whole plugin (PHP, JavaScript, CSS, and images). The full text is in <code>license.txt<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>tocguide<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP through <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate <strong>TOCguide<\/strong>.<\/li>\n<li>Add the Table of Contents block to a post that contains headings, or enable auto-insert under <strong>Settings \u2192 TOCguide<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20the%20classic%20editor%3F\"><h3>Does it work with the classic editor?<\/h3><\/dt>\n<dd><p>The block is for the block editor. For classic content or a theme template, use the <code>[tocguide]<\/code> shortcode.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20elementor%3F\"><h3>Does it work with Elementor?<\/h3><\/dt>\n<dd><p>Yes. Add a Shortcode widget to your Elementor layout and enter <code>[tocguide]<\/code>. TOCguide automatically reads headings from your Elementor Heading widgets (via the stored widget JSON) and injects matching ID anchors into the rendered page so all TOC links scroll correctly. No extra plugin or configuration needed.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20divi%3F\"><h3>Does it work with Divi?<\/h3><\/dt>\n<dd><p>Yes. Add a Code module or Shortcode module to your Divi section and enter <code>[tocguide]<\/code>. TOCguide scans the rendered page HTML for headings and injects the correct anchor IDs.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20bricks%20builder%3F\"><h3>Does it work with Bricks Builder?<\/h3><\/dt>\n<dd><p>Yes. Paste <code>[tocguide]<\/code> into a Bricks Code element or Shortcode element. TOCguide reads headings directly from Bricks' element meta (heading and rich-text elements) and injects the correct IDs.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20beaver%20builder%3F\"><h3>Does it work with Beaver Builder?<\/h3><\/dt>\n<dd><p>Yes. Add an HTML module or Shortcode module containing <code>[tocguide]<\/code>. TOCguide uses <code>[tocguide]<\/code> detected in Beaver Builder data to ensure headings receive the correct anchor IDs.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20wpbakery%20%2F%20visual%20composer%3F\"><h3>Does it work with WPBakery \/ Visual Composer?<\/h3><\/dt>\n<dd><p>Yes. Add a Raw HTML element or Shortcode element with <code>[tocguide]<\/code>. TOCguide scans the rendered HTML for headings and injects IDs automatically.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20oxygen%20builder%20or%20breakdance%3F\"><h3>Does it work with Oxygen Builder or Breakdance?<\/h3><\/dt>\n<dd><p>Yes. Insert <code>[tocguide]<\/code> via a Shortcode element or Code Block. TOCguide detects the shortcode in Oxygen\/Breakdance meta and handles heading ID injection through the rendered HTML.<\/p><\/dd>\n<dt id=\"can%20it%20co-exist%20with%20my%20seo%20plugin%20%28yoast%2C%20rank%20math%29%3F\"><h3>Can it co-exist with my SEO plugin (Yoast, Rank Math)?<\/h3><\/dt>\n<dd><p>Yes. The optional JSON-LD schema is off by default. If you enable it, turn off TOC schema in your SEO plugin (or vice versa) to avoid duplicate structured data. The <code>&lt;nav&gt;<\/code> landmark itself does not conflict with any SEO plugin.<\/p><\/dd>\n<dt id=\"will%20the%20links%20scroll%20to%20my%20headings%3F\"><h3>Will the links scroll to my headings?<\/h3><\/dt>\n<dd><p>Yes. Matching anchor IDs are added automatically. Custom HTML anchors on a heading are respected. Smooth scrolling and a pixel offset are configurable under Settings \u2192 TOCguide.<\/p><\/dd>\n<dt id=\"how%20are%20section%20previews%20generated%3F\"><h3>How are section previews generated?<\/h3><\/dt>\n<dd><p>The server walks the parsed block content and extracts the first ~20 words after each heading. No JavaScript fetch, no API, no external service.<\/p><\/dd>\n<dt id=\"how%20do%20emoji%20reactions%20work%3F\"><h3>How do emoji reactions work?<\/h3><\/dt>\n<dd><p>Each reader's choices are stored in their browser's <code>localStorage<\/code>. Nothing is sent to your server or any third party. If two readers use the same browser profile they see the same reactions, but reactions are per-device and never aggregated.<\/p><\/dd>\n<dt id=\"how%20are%20citations%20generated%3F\"><h3>How are citations generated?<\/h3><\/dt>\n<dd><p>Citations are built from data already in WordPress: the post author's display name, post title, blog name, published date, and permalink. The \u00a7 button constructs the formatted string in JavaScript and copies it to the clipboard. The citation includes the section anchor (<code>#slug<\/code>) so it links directly to that section.<\/p><\/dd>\n<dt id=\"can%20i%20hide%20the%20toc%20on%20short%20posts%3F\"><h3>Can I hide the TOC on short posts?<\/h3><\/dt>\n<dd><p>Yes. Set <strong>Minimum headings<\/strong> in Settings \u2192 TOCguide.<\/p><\/dd>\n<dt id=\"does%20it%20work%20in%20columns%20or%20groups%3F\"><h3>Does it work in columns or groups?<\/h3><\/dt>\n<dd><p>Yes. Headings nested inside Group, Columns, Cover, and similar blocks are included in both the TOC and the Reading Guide section data.<\/p><\/dd>\n<dt id=\"can%20i%20have%20more%20than%20one%20toc%20on%20a%20page%3F\"><h3>Can I have more than one TOC on a page?<\/h3><\/dt>\n<dd><p>Each instance lists the same headings from that post. Prefer one outline per page.<\/p><\/dd>\n<dt id=\"is%20any%20data%20sent%20off-site%3F\"><h3>Is any data sent off-site?<\/h3><\/dt>\n<dd><p>No. Zero external network requests from TOCguide in any mode.<\/p><\/dd>\n<dt id=\"what%20license%20is%20tocguide%20under%3F\"><h3>What license is TOCguide under?<\/h3><\/dt>\n<dd><p>GNU GPLv2 or later, covering the whole plugin (PHP, JavaScript, CSS, and images). Copyright Matt Hummel. Full text: <code>license.txt<\/code>.<\/p><\/dd>\n<dt id=\"is%20tocguide%20affiliated%20with%20another%20product%3F\"><h3>Is TOCguide affiliated with another product?<\/h3><\/dt>\n<dd><p>No. Independent plugin by Matt Hummel. Display name TOCguide; slug, folder, and text domain <code>tocguide<\/code>. That naming is intentional for WordPress.org guideline 17.<\/p><\/dd>\n<dt id=\"does%20it%20load%20scripts%20or%20fonts%20from%20a%20cdn%3F\"><h3>Does it load scripts or fonts from a CDN?<\/h3><\/dt>\n<dd><p>No. Plugin CSS and JS are local. Core-bundled libraries are used where WordPress already ships them. No remote executable code.<\/p><\/dd>\n<dt id=\"who%20can%20change%20settings%3F\"><h3>Who can change settings?<\/h3><\/dt>\n<dd><p>Users with the <code>manage_options<\/code> capability (typically administrators). The welcome notice is dismissible and uses a nonce.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens when I delete the plugin?<\/h3><\/dt>\n<dd><p>Deactivate leaves settings in place. Delete runs <code>uninstall.php<\/code>, which removes stored options only if you enabled \u201cdelete data on uninstall\u201d in Settings.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.6.3<\/h4>\n\n<ul>\n<li>The outline has default space above and below it. A margin set on the block still replaces that default.<\/li>\n<li>Theme checklist marks no longer paint a check in front of each heading. The outline keeps its own dot or number.<\/li>\n<\/ul>\n\n<h4>1.6.2<\/h4>\n\n<ul>\n<li>Fix: Design colours, fonts, and spacing stay on the outline, including the title, when the theme styles every heading and link.<\/li>\n<li>Minimal, Boxed, Underline, and Card are distinct, and Compact tightens padding and type. Saved settings clear the page cache so the front end updates.<\/li>\n<li>Settings \u2192 TOCguide is split into section tabs, with a live outline preview.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Fix: with Exclude theme styles on, the outline is not a theme list, so theme counters can no longer print \u201c0.\u201d in front of every heading. Note and citation buttons stay on the right of the heading.<\/li>\n<li>Note, collapse, resume, and export controls share one icon-button style.<\/li>\n<li>Design settings: link case, title colour, icon colour, number style (circle, square, or plain), and shadow. Per-block Theme styles can follow the site setting or override it. Shortcode: <code>theme=\"exclude\"<\/code> or <code>theme=\"include\"<\/code>.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Fix: section labels no longer pick up a theme list counter that printed \u201c0.\u201d in front of every heading. Numbered lists use real badges (1, 2, 3 or 1.1) when Exclude theme styles is on.<\/li>\n<li>The note, citation, resume, and export controls are icon buttons. The note button sits to the right of the heading instead of on the line below.<\/li>\n<li>Settings \u2192 TOCguide \u2192 Design: Exclude theme styles (on by default), plus font, title size and weight, letter spacing, item spacing, accent, hover, and number-badge colours.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>One identity: PHP (<code>tocguide_*<\/code> \/ <code>TOCguide_*<\/code> \/ <code>TOCGUIDE_*<\/code>), CSS (<code>.tocguide<\/code>, <code>--tocguide-*<\/code>), block <code>tocguide\/table-of-contents<\/code>, shortcode <code>[tocguide]<\/code>, option <code>tocguide_settings<\/code>, skip class <code>tocguide-skip<\/code>.<\/li>\n<li>Docs, support site, and in-admin Docs &amp; Support URLs: <code>matthummel-pa.github.io\/tocguide<\/code>.<\/li>\n<li>GitHub repository: <code>matthummel-pa\/tocguide<\/code>.<\/li>\n<li>Breaking: re-insert the block and re-save Settings if you used an earlier zip. No automatic migration of old keys.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Rebrand for WordPress.org guideline 17: display name is now TOCguide and the plugin slug \/ text domain \/ main file are <code>tocguide<\/code>. Not affiliated with any other product.<\/li>\n<li>Shortcode <code>[tocguide]<\/code>.<\/li>\n<li>Existing blocks, CSS classes, and settings keys stayed on the previous identifier so current content kept working.<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Fix: <code>$guide_attrs<\/code> array was re-initialized to empty on the line after <code>data-tocguide-focus<\/code> was written to it \u2014 the accessibility focus-ring attribute was always discarded. Moved array init before the focus-style assignment.<\/li>\n<li>Fix: global background and font custom properties (<code>--tocguide-bg<\/code>, <code>--tocguide-color<\/code>, <code>--tocguide-link-color<\/code>, etc.) now correctly propagate to the <code>&lt;nav&gt;<\/code> style attribute for both the block and shortcode\/auto-insert rendering paths.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Fix: short description in <code>readme.txt<\/code> trimmed from 175 to 145 characters \u2014 WordPress.org parser silently truncates anything over 150 characters.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fix: escape <code>$swatch_val<\/code> at the point of <code>printf()<\/code> output in the admin colour-picker widget \u2014 resolves <code>WordPress.Security.EscapeOutput<\/code> PHPCS error flagged by WordPress.org reviewers.<\/li>\n<li>Fix: added missing PHPDoc block for <code>TOCguide_Settings::sanitize()<\/code>.<\/li>\n<li>Fix: inline comment casing and full-stop in <code>class-tocguide-plugin.php<\/code> to satisfy PHPCS <code>Squiz.Commenting.InlineComment<\/code>.<\/li>\n<li>Chore: PHPCBF auto-fixed 181 array-alignment warnings across <code>class-tocguide-settings.php<\/code>, <code>class-tocguide-plugin.php<\/code>, and <code>class-tocguide-headings.php<\/code>.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: <strong>Design &amp; Appearance<\/strong> section in Settings \u2192 TOCguide \u2014 set global background, text, link, and border colours; font size, weight, and line height; border width \/ style \/ radius; and padding. All values are applied as CSS custom properties so block-editor per-instance overrides still win.<\/li>\n<li>New: <strong>Reading Guide &amp; Study Tools<\/strong> section in settings \u2014 configure global defaults for hover section preview, guide mode, density bars, read time, progress fade, emoji reactions, and academic citations.<\/li>\n<li>New: <strong>Study Tools &amp; Export<\/strong> section in settings \u2014 global defaults for reading progress bar, resume bookmark, reader note pads, and export toolbar.<\/li>\n<li>New: <strong>Accessibility<\/strong> section in settings \u2014 choose focus ring style: Default, Bold (3 px, WCAG AA), or High-contrast (yellow background, WCAG AAA).<\/li>\n<li>New: Admin JS syncs hex colour text inputs with companion colour swatches and toggles guide-mode sub-options conditionally.<\/li>\n<li>Fix: CSS preset styles (minimal, boxed, underline, card) correctly override global design custom properties.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Fix: <code>TOCGUIDE_VERSION<\/code> constant was stuck at <code>1.2.0<\/code>; now reads <code>1.2.2<\/code> correctly (admin version badge and <code>Version %s<\/code> string now match the plugin header).<\/li>\n<li>Fix: <code>Tested up to<\/code> updated from 6.7 to 7.1 (WordPress 7.1 \"Mary Lou\", released 2026-08-19).<\/li>\n<li>Fix: removed third-party trademark <code>elementor<\/code> from tags; replaced with <code>study tools<\/code>.<\/li>\n<li>Fix: PHP coding-standards indentation in shortcode attribute registration and admin settings view.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fix: debounced resume-bookmark localStorage writes from every IntersectionObserver callback to every 500 ms, preventing redundant writes during fast scrolling.<\/li>\n<li>Docs: completed v1.1.0 CHANGELOG entry (hover preview, export\/print toolbar, full accessibility and page-builder details).<\/li>\n<li>Docs: added \"What's new\" tables and \"Performance\" section to README for reviewers.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: <strong>Reader note pads<\/strong> \u2014 a \ud83d\udcdd button per section lets readers jot personal notes stored privately in localStorage. No account, no server. Enable with <code>rnotes=\"1\"<\/code> in the shortcode or the new \"Reader note pads\" toggle in the block sidebar.<\/li>\n<li>New: <strong>Reading progress bar<\/strong> \u2014 a thin animated bar shows 0\u2013100 % of the document read (based on headings scrolled past via IntersectionObserver). Enable with <code>rprogress=\"1\"<\/code>.<\/li>\n<li>New: <strong>Resume reading bookmark<\/strong> \u2014 automatically bookmarks the last-read heading in localStorage; shows a \"\u21a9 Resume\" button on return visits. Enable with <code>bookmark=\"1\"<\/code>.<\/li>\n<li>New: <strong>Section Planner<\/strong> \u2014 the \"Section Notes\" sidebar panel is now \"Section Planner\" with per-heading writing status (\u270f\ufe0f Draft \/ \ud83d\udd04 In progress \/ \u2705 Done) tracked in the editor canvas and a reader-facing teaser note.<\/li>\n<li>New: <strong>Total read-time badge<\/strong> \u2014 when Reading Guide + read-time are active, the TOC header shows the aggregated total read time for the entire post.<\/li>\n<li>New shortcode attributes: <code>rprogress<\/code>, <code>bookmark<\/code>, <code>rnotes<\/code>.<\/li>\n<li>New block attributes: <code>showReaderNotes<\/code>, <code>showReadingProgress<\/code>, <code>showBookmark<\/code>, <code>sectionStatus<\/code>.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: <strong>Reading Guide mode<\/strong> \u2014 enable per-block to show section content previews (server-extracted, no JS fetch), visual content-density bars, per-section read-time estimates, and scroll-based reading progress.<\/li>\n<li>New: <strong>Author section notes<\/strong> \u2014 type a teaser or hook per heading in the block sidebar (Section Notes panel); readers reveal it with a \u270d button.<\/li>\n<li>New: <strong>Emoji reactions<\/strong> \u2014 readers react per section (\ud83d\udca1 \u2b50 \ud83e\udd14 \u2705) with state stored in localStorage; no accounts, no server calls.<\/li>\n<li>New: <strong>Per-section academic citations<\/strong> \u2014 \u00a7 button copies APA, MLA, Chicago, Harvard, or plain-link citation built from WordPress post meta; no external API.<\/li>\n<li>New: <strong>Hover section preview<\/strong> \u2014 floating tooltip on TOC link hover\/focus; viewport-aware positioning; <code>aria-describedby<\/code> for screen readers.<\/li>\n<li>Compatibility: <strong>Elementor<\/strong> \u2014 heading data extracted from <code>_elementor_data<\/code> widget JSON; IDs injected into rendered output via <code>the_content<\/code> at priority 999.<\/li>\n<li>Compatibility: <strong>Bricks Builder<\/strong> \u2014 heading and rich-text elements parsed from <code>_bricks_page_content_2<\/code> meta.<\/li>\n<li>Compatibility: <strong>Divi, WPBakery, Oxygen, Beaver Builder, Breakdance<\/strong> \u2014 HTML-based heading scan as a generic fallback; IDs injected into rendered HTML so all builder-generated headings are reachable from TOC links.<\/li>\n<li>New block attributes: <code>guideMode<\/code>, <code>showPreviews<\/code>, <code>showDensity<\/code>, <code>showReadTime<\/code>, <code>trackProgress<\/code>, <code>showReactions<\/code>, <code>showCitations<\/code>, <code>citationStyle<\/code>, <code>sectionNotes<\/code>, <code>previewOnHover<\/code>.<\/li>\n<li>Block internals: <code>TOCguide_Headings::get_sections()<\/code> (word count + preview extraction), <code>citation_meta()<\/code>, <code>get_all_from_html()<\/code>, <code>get_all_from_elementor()<\/code>, <code>get_all_from_bricks()<\/code>, <code>inject_ids_in_html()<\/code>; updated <code>render_list()<\/code> and <code>render_nav()<\/code>.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Removed <code>load_plugin_textdomain()<\/code> \u2014 WordPress.org directory auto-loads the <code>tocguide<\/code> text domain since WP 4.6.<\/li>\n<li>Prefixed template and uninstall variables with <code>tocguide_<\/code>.<\/li>\n<li><code>Tested up to<\/code> 6.7.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>First installable GitHub zip of the 1.0 feature set (build + plugin-zip on tag).<\/li>\n<li>Docs site, 100% GPLv2-or-later packaging, translation template, and WordPress.org banner\/icon assets.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Live editor preview, style presets, collapse, sticky, and scroll-spy.<\/li>\n<li>Smooth scroll with offset; H5\/H6 support.<\/li>\n<li>Auto-generate the Gutenberg block, <code>[tocguide]<\/code> shortcode, skip class <code>no-toc<\/code>.<\/li>\n<li>Settings and Docs &amp; Support admin screens.<\/li>\n<li>Heading IDs via WP_HTML_Tag_Processor; custom anchors respected.<\/li>\n<\/ul>","raw_excerpt":"Table of Contents block with a built-in Reading Guide \u2014 section previews, read time, reactions, and citations. Server-rendered, no external APIs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/363186","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=363186"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/matthummel"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=363186"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=363186"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=363186"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=363186"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=363186"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=363186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}