{"id":347746,"date":"2026-08-19T05:15:44","date_gmt":"2026-08-19T05:15:44","guid":{"rendered":"https:\/\/en-gb.wordpress.org\/plugins\/reading-progress-table-of-contents\/"},"modified":"2026-08-19T05:00:18","modified_gmt":"2026-08-19T05:00:18","slug":"erryn-reading-progress-table-of-contents","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/erryn-reading-progress-table-of-contents\/","author":23539438,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.3","stable_tag":"trunk","tested":"7.0.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Erryn Reading Progress & Table of Contents","header_author":"Erryn Deane","header_description":"A lightweight progress indicator and navigable table of contents for WordPress.","assets_banners_color":"","last_updated":"2026-08-19 05:00:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/erryn.io\/products\/reading-progress-table-of-contents\/","header_author_uri":"https:\/\/erryn.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":22,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":{"1.0.3":"<p>Frontend assets are now minified for production.<\/p>","1.0.2":"<p>Rename of the reading_progress_toc shortcode to rptoc_reading_progress_toc. Update any posts using the old tag.<\/p>","1.0.1":"<p>Fixes horizontal scrolling of the section links on mobile.<\/p>","1.0.0":"<p>Initial public release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":{"rptoc\/toc-anchor":{"apiVersion":3,"name":"rptoc\/toc-anchor","title":"TOC Anchor","category":"widgets","icon":"admin-links","description":"Marks a point on this page to appear in the TOC & Progress bar. When any TOC Anchor blocks exist on a page, they replace automatic H2\/H3 detection entirely for that page.","keywords":["toc","anchor","table of contents","jump link"],"attributes":{"label":{"type":"string","default":""}},"supports":{"html":false,"multiple":true},"textdomain":"erryn-reading-progress-table-of-contents","version":"1.0.3","editorScript":"file:.\/editor.js"},"rptoc\/toc-progress":{"apiVersion":3,"name":"rptoc\/toc-progress","title":"TOC & Progress","category":"widgets","icon":"list-view","description":"Adds the combined table of contents and reading progress bar. Fixed to the bottom of the viewport regardless of where this block sits on the page; headings are pulled automatically from this page's H2\/H3s.","keywords":["toc","table of contents","progress bar","reading progress"],"supports":{"html":false,"multiple":false,"reusable":false},"textdomain":"erryn-reading-progress-table-of-contents","version":"1.0.3","editorScript":"file:.\/editor.js"}},"tagged_versions":[],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The horizontal reading-progress bar with the current section highlighted.","2":"The side rail expanded into the full table of contents.","3":"General settings for automatic insertion, headings and post types.","4":"Placement controls for the bar, rail and header offset.","5":"Appearance settings for link style, sizing and spacing.","6":"Theme, palette and custom colour controls with the live contrast check.","7":"Per-post controls in the WordPress editor.","8":"The TOC &amp; Progress and TOC Anchor blocks in the block editor."}},"plugin_section":[],"plugin_tags":[1753,9351,225949,10851,10852],"plugin_category":[43],"plugin_contributors":[276404],"plugin_business_model":[],"class_list":["post-347746","plugin","type-plugin","status-publish","hentry","plugin_tags-navigation","plugin_tags-progress-bar","plugin_tags-reading-progress","plugin_tags-table-of-contents","plugin_tags-toc","plugin_category-customization","plugin_contributors-errynio","plugin_committers-errynio"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/erryn-reading-progress-table-of-contents.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Erryn Reading Progress &amp; Table of Contents helps readers understand where they are in a long page and move directly to the section they need.<\/p>\n\n<p>It automatically builds a table of contents from your headings, shows reading progress as the visitor scrolls, and highlights the current section.<\/p>\n\n<p>It works immediately after activation, follows your theme's colours in light and dark mode, and provides sensible defaults without requiring shortcodes or manual setup.<\/p>\n\n<h4>Two responsive layouts<\/h4>\n\n<p>Choose between:<\/p>\n\n<ul>\n<li><strong>Horizontal bar<\/strong>: a progress bar with section links, fixed at the top or bottom of the viewport.<\/li>\n<li><strong>Side rail<\/strong>: a compact column of section markers that expands into the full contents list on hover or keyboard focus.<\/li>\n<\/ul>\n\n<p>On smaller screens, the side rail automatically switches to the horizontal bar.<\/p>\n\n<h4>Automatic or manual control<\/h4>\n\n<p>By default, the plugin detects headings and displays itself automatically when a post contains enough sections.<\/p>\n\n<p>You can also:<\/p>\n\n<ul>\n<li>Add the <strong>TOC &amp; Progress<\/strong> block to enable it explicitly on a page.<\/li>\n<li>Use the <code>[rptoc_reading_progress_toc]<\/code> or <code>[rptoc]<\/code> shortcode.<\/li>\n<li>Add <strong>TOC Anchor<\/strong> blocks to define your own sections and labels.<\/li>\n<li>Force the component on or off for an individual post.<\/li>\n<li>Select which post types and heading levels should be included.<\/li>\n<li>Exclude individual posts.<\/li>\n<li>Provide a custom content-area selector for unusual themes.<\/li>\n<\/ul>\n\n<p>When a page contains a TOC Anchor block, the plugin uses the manual anchors instead of generating its contents from headings.<\/p>\n\n<h4>Designed to fit your theme<\/h4>\n\n<p>The plugin can inherit colours from your active theme, including sites that switch between light and dark mode.<\/p>\n\n<p>You may also choose colours from the theme palette or enter custom colours and opacity values.<\/p>\n\n<p>A live contrast check warns when custom text and background colours may be difficult to read.<\/p>\n\n<p>Appearance options include:<\/p>\n\n<ul>\n<li>Rounded pills or plain-text links.<\/li>\n<li>Start, centre or end alignment.<\/li>\n<li>Desktop and mobile font sizes.<\/li>\n<li>Adjustable pill spacing.<\/li>\n<li>Progress fill above or below the links.<\/li>\n<li>Top or bottom placement.<\/li>\n<li>Automatic or custom sticky-header offset.<\/li>\n<li>An optional drop shadow, off by default.<\/li>\n<\/ul>\n\n<h4>Fast by design<\/h4>\n\n<p>The plugin avoids repeatedly measuring the page during an ordinary scroll.<\/p>\n\n<p>It measures section positions when required, stores those measurements, and updates the progress indicator through <code>requestAnimationFrame<\/code>. The active section is tracked with <code>IntersectionObserver<\/code>, keeping that work out of the scroll handler.<\/p>\n\n<p>There is no jQuery dependency and no frontend build framework.<\/p>\n\n<h4>Accessibility<\/h4>\n\n<p>The component uses ordinary anchor links, supports keyboard interaction and identifies the active section with <code>aria-current<\/code>.<\/p>\n\n<p>Section links continue to work without JavaScript. JavaScript is required for the progress indicator, active-section highlighting and expandable side rail.<\/p>\n\n<p>Right-to-left layouts are supported.<\/p>\n\n<h4>Structured data and SEO plugins<\/h4>\n\n<p>Optional ItemList structured data can provide a machine-readable description of the page sections.<\/p>\n\n<p>The plugin also registers as a recognised table of contents for Rank Math's content analysis, and can run alongside Yoast SEO and All in One SEO.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Erryn Reading Progress &amp; Table of Contents does not collect, store or send visitor data.<\/p>\n\n<p>There are no accounts, external API requests or tracking scripts.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Automatic table of contents from H2 to H6 headings.<\/li>\n<li>Reading progress indicator.<\/li>\n<li>Current-section highlighting.<\/li>\n<li>Horizontal bar and side-rail layouts.<\/li>\n<li>Responsive mobile behaviour.<\/li>\n<li>Automatic theme colour inheritance.<\/li>\n<li>Light- and dark-mode support.<\/li>\n<li>Theme-palette and custom colour options.<\/li>\n<li>Per-colour opacity controls.<\/li>\n<li>Live colour-contrast warnings.<\/li>\n<li>Top or bottom viewport placement.<\/li>\n<li>Automatic or custom header offset.<\/li>\n<li>Pill or plain-text links.<\/li>\n<li>Responsive font-size controls.<\/li>\n<li>Optional drop shadow, off by default.<\/li>\n<li>TOC Anchor block for manually defined sections.<\/li>\n<li>TOC &amp; Progress block.<\/li>\n<li>Shortcode support.<\/li>\n<li>Per-post display controls.<\/li>\n<li>Optional ItemList structured data.<\/li>\n<li>Rank Math table-of-contents recognition.<\/li>\n<li>WPML and Polylang support.<\/li>\n<li>Translation template included.<\/li>\n<li>Right-to-left support.<\/li>\n<li><code>aria-current<\/code> on the active link.<\/li>\n<li>No jQuery.<\/li>\n<li>No tracking.<\/li>\n<\/ul>\n\n<p>For screenshots, a live demonstration and further technical details, visit the plugin page:<\/p>\n\n<p>https:\/\/erryn.io\/products\/erryn-reading-progress-table-of-contents\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/erryn-reading-progress-table-of-contents\/<\/code>, or install the plugin through the WordPress Plugins screen.<\/li>\n<li>Activate <strong>Erryn Reading Progress &amp; Table of Contents<\/strong>.<\/li>\n<li>Open a post or page containing several headings.<\/li>\n<li>Visit <strong>Settings &gt; Reading Progress<\/strong> to change the layout, placement or appearance.<\/li>\n<\/ol>\n\n<p>The plugin works with its default settings immediately after activation.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20to%20configure%20anything%3F\"><h3>Do I need to configure anything?<\/h3><\/dt>\n<dd><p>No. Activate the plugin and it will appear automatically on supported posts and pages that contain enough headings.<\/p>\n\n<p>All settings are optional.<\/p><\/dd>\n<dt id=\"can%20i%20turn%20it%20off%20on%20one%20post%3F\"><h3>Can I turn it off on one post?<\/h3><\/dt>\n<dd><p>Yes. Open the Reading Progress &amp; Contents panel in the post editor and choose <strong>Never show<\/strong>.<\/p>\n\n<p>You can also choose <strong>Always show<\/strong> to override the global automatic-insertion rules for that post.<\/p><\/dd>\n<dt id=\"can%20i%20define%20the%20sections%20myself%3F\"><h3>Can I define the sections myself?<\/h3><\/dt>\n<dd><p>Yes. Add TOC Anchor blocks where you want entries to appear.<\/p>\n\n<p>Once a page contains one TOC Anchor block, the plugin uses the manual anchors instead of generating its contents from headings.<\/p><\/dd>\n<dt id=\"can%20i%20use%20it%20outside%20the%20block%20editor%3F\"><h3>Can I use it outside the block editor?<\/h3><\/dt>\n<dd><p>Yes. Use the <code>[rptoc_reading_progress_toc]<\/code> shortcode. The shorter <code>[rptoc]<\/code> version is also available.<\/p>\n\n<p>It can be used in the Classic Editor and page builders that process standard WordPress shortcodes.<\/p><\/dd>\n<dt id=\"what%20happens%20on%20mobile%3F\"><h3>What happens on mobile?<\/h3><\/dt>\n<dd><p>The horizontal bar remains available on smaller screens.<\/p>\n\n<p>When the side-rail layout is selected, it automatically switches to the horizontal bar on mobile devices.<\/p><\/dd>\n<dt id=\"does%20it%20modify%20my%20saved%20content%3F\"><h3>Does it modify my saved content?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>The plugin adds IDs and its own markup to the rendered page. It does not permanently rewrite the content stored in the WordPress editor.<\/p><\/dd>\n<dt id=\"will%20it%20work%20with%20a%20sticky%20header%3F\"><h3>Will it work with a sticky header?<\/h3><\/dt>\n<dd><p>The plugin attempts to detect the site header automatically.<\/p>\n\n<p>You can also set a custom header offset in pixels when automatic detection does not suit the theme.<\/p><\/dd>\n<dt id=\"can%20i%20use%20a%20custom%20content%20container%3F\"><h3>Can I use a custom content container?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>Under the advanced detection settings, choose the custom selector option and provide the CSS selector for the content area, such as:<\/p>\n\n<pre><code>article .entry-content\n<\/code><\/pre><\/dd>\n<dt id=\"does%20it%20collect%20any%20data%3F\"><h3>Does it collect any data?<\/h3><\/dt>\n<dd><p>No. The plugin does not track visitors or send data to an external service.<\/p><\/dd>\n<dt id=\"does%20it%20work%20without%20javascript%3F\"><h3>Does it work without JavaScript?<\/h3><\/dt>\n<dd><p>The table-of-contents links remain ordinary anchor links and can still be used.<\/p>\n\n<p>JavaScript is required for the progress fill, active-section highlighting and side-rail interaction.<\/p><\/dd>\n<dt id=\"can%20i%20customise%20it%20with%20css%3F\"><h3>Can I customise it with CSS?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>The plugin uses CSS custom properties for its colours and spacing, allowing developers to restyle it without editing the plugin files.<\/p><\/dd>\n<dt id=\"does%20the%20structured%20data%20guarantee%20search-result%20jump%20links%3F\"><h3>Does the structured data guarantee search-result jump links?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>The optional ItemList markup provides a machine-readable description of the page sections, but it does not guarantee a particular search-result treatment or ranking improvement.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>The frontend stylesheet and script are now minified for production, roughly a third of their previous size after compression.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed the Plugin URI pointing to a page that does not exist.<\/li>\n<li>Renamed the reading_progress_toc shortcode to rptoc_reading_progress_toc for a consistent, unique prefix.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed the section links not scrolling sideways on mobile when the side-rail layout falls back to the bar.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Automatic table-of-contents generation from H2 to H6 headings.<\/li>\n<li>Horizontal reading-progress bar and expandable side-rail layouts.<\/li>\n<li>Active-section highlighting and responsive mobile behaviour.<\/li>\n<li>Theme-derived, palette and custom colour options, with a live contrast check.<\/li>\n<li>Block, shortcode and per-post controls.<\/li>\n<li>Manual TOC Anchor blocks.<\/li>\n<li>Optional ItemList structured data.<\/li>\n<li>Rank Math recognition, alongside Yoast and All in One SEO.<\/li>\n<li>WPML, Polylang and right-to-left support.<\/li>\n<\/ul>","raw_excerpt":"Add a fast reading progress bar and automatic table of contents to WordPress posts and pages.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/347746","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=347746"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/errynio"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=347746"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=347746"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=347746"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=347746"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=347746"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=347746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}