{"id":353573,"date":"2026-08-21T22:03:13","date_gmt":"2026-08-21T22:03:13","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/horizontal-toc-for-elementor\/"},"modified":"2026-08-22T18:24:50","modified_gmt":"2026-08-22T18:24:50","slug":"navrail-toc-for-elementor","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/navrail-toc-for-elementor\/","author":14574211,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"1.3.0","tested":"7.1","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"Navrail TOC for Elementor","header_author":"Hadi Omid","header_description":"A horizontal Table of Contents widget for Elementor.","assets_banners_color":"d1d0cf","last_updated":"2026-08-22 18:24:50","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/hadiomid\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":53,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.0":{"tag":"1.3.0","author":"hadi.omid","date":"2026-08-22 18:24:50"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3660752,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3660743,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3660743,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3660752,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3660993,"resolution":"1","location":"assets","locale":"","width":726,"height":1852},"screenshot-2.gif":{"filename":"screenshot-2.gif","revision":3660993,"resolution":"2","location":"assets","locale":"","width":293,"height":600}},"screenshots":{"1":"Style settings panel in Elementor editor","2":"Frontend display of the horizontal TOC navigation bar"}},"plugin_section":[],"plugin_tags":[76538,1753,10851,10852],"plugin_category":[43],"plugin_contributors":[276878],"plugin_business_model":[],"class_list":["post-353573","plugin","type-plugin","status-publish","hentry","plugin_tags-elementor","plugin_tags-navigation","plugin_tags-table-of-contents","plugin_tags-toc","plugin_category-customization","plugin_contributors-hadiomid","plugin_committers-hadiomid"],"banners":{"banner":"https:\/\/ps.w.org\/navrail-toc-for-elementor\/assets\/banner-772x250.png?rev=3660752","banner_2x":"https:\/\/ps.w.org\/navrail-toc-for-elementor\/assets\/banner-1544x500.png?rev=3660743","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/navrail-toc-for-elementor\/assets\/icon-128x128.png?rev=3660752","icon_2x":"https:\/\/ps.w.org\/navrail-toc-for-elementor\/assets\/icon-256x256.png?rev=3660743","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/navrail-toc-for-elementor\/assets\/screenshot-1.png?rev=3660993","caption":"Style settings panel in Elementor editor"},{"src":"https:\/\/ps.w.org\/navrail-toc-for-elementor\/assets\/screenshot-2.gif?rev=3660993","caption":"Frontend display of the horizontal TOC navigation bar"}],"raw_content":"<!--section=description-->\n<p>Navrail TOC for Elementor adds a horizontal section-navigation bar to any Elementor page. It automatically detects your headings, highlights the current section as visitors scroll, and keeps that item in view \u2014 no manual list-building required.<\/p>\n\n<p><strong>Key features<\/strong><\/p>\n\n<ul>\n<li>Automatic heading detection (choose which H1\u2013H6 levels to include)<\/li>\n<li>Smooth scroll with active-section highlighting<\/li>\n<li>Auto-scrolling, swipeable navigation bar with edge fade<\/li>\n<li>Optional leading text with Dynamic Tags support<\/li>\n<li>Full style control: colors, borders, spacing, and separate Normal\/Hover\/Active states<\/li>\n<li>Optional truncation for long titles<\/li>\n<li>Lightweight \u2014 no external libraries, loads only where the widget is used<\/li>\n<\/ul>\n\n<p>This plugin is an independent, third-party extension for Elementor and is not affiliated with or endorsed by Elementor.com.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP via Plugins \u2192 Add New \u2192 Upload Plugin, or extract it into <code>wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate \"Navrail TOC for Elementor\".<\/li>\n<li>Edit any page with Elementor and drag the \"Horizontal TOC\" widget (in the \"Horizontal TOC\" category) onto the page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20plugin%20free%3F\"><h3>Is this plugin free?<\/h3><\/dt>\n<dd><p>Yes, completely. Every feature described above is included \u2014 no premium version, no upsells, no ads.<\/p><\/dd>\n<dt id=\"does%20this%20require%20elementor%20pro%3F\"><h3>Does this require Elementor Pro?<\/h3><\/dt>\n<dd><p>No. Only the free Elementor plugin is required.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20elementor%27s%20sticky%20effect%3F\"><h3>Does this work with Elementor's Sticky effect?<\/h3><\/dt>\n<dd><p>Yes. If Elementor Pro is active, apply its native Sticky motion effect to the widget's Container. If Elementor Pro is not active, a built-in Sticky option appears automatically in the widget's Style tab.<\/p><\/dd>\n<dt id=\"why%20don%27t%20i%20see%20any%20items%3F\"><h3>Why don't I see any items?<\/h3><\/dt>\n<dd><p>The widget builds its navigation from headings already on the page. Make sure the selected Heading Levels match the headings actually used in your content.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Renamed the plugin from \"Horizontal TOC for Elementor\" to \"Navrail TOC for Elementor\" (slug: navrail-toc-for-elementor) at the request of the WordPress.org Plugins Team review, to add a distinctive identifying term ahead of the trademark reference, per their naming guidelines.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fixed: removed \"Plugin URI\" \/ \"Author URI\" \/ \"Domain Path\" placeholder header values that fail WordPress.org Plugin Check (a placeholder domain, and a Domain Path pointing at a folder this plugin does not ship).<\/li>\n<li>Fixed: removed the discouraged <code>load_plugin_textdomain()<\/code> call \u2014 WordPress core has auto-loaded plugin translations by text domain since 4.6.<\/li>\n<li>Fixed: renamed <code>Horizontal_TOC_Plugin<\/code>\/<code>Horizontal_TOC_Widget<\/code> classes to <code>HTOC_Plugin<\/code>\/<code>HTOC_Widget<\/code> to consistently use the plugin's established prefix.<\/li>\n<li>Updated: \"Tested up to\" to 7.0.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Fixed: <code>item_padding<\/code>'s built-in default value could trigger a known Elementor core bug where the Tablet\/Mobile responsive placeholder rendered as garbled text (e.g. \"[object Object]\") for Dimensions-type controls with an asymmetric (unlinked) default. The default has been removed; the control's description now suggests a starting value instead.<\/li>\n<li>Added: \"Max Characters\"\/\"Max Words\" (truncation length) are now responsive \u2014 set separate values per Desktop\/Tablet\/Mobile, consistent with Elementor's standard breakpoint inheritance.<\/li>\n<li>Added: a minimal CSS-only Sticky fallback (Style tab), automatically shown only on sites where Elementor Pro is not active, so the widget can still be made sticky without duplicating Elementor Pro's native Sticky motion effect where it's available.<\/li>\n<li>Improved: resizing the viewport (including switching Desktop\/Tablet\/Mobile preview inside the Elementor editor) now immediately re-applies the correct per-breakpoint truncation length and active alignment.<\/li>\n<li>Confirmed: all 100+ user-facing strings are wrapped for translation, with a text domain matching the plugin slug.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fixed: added a baseline <code>min-height<\/code> so the navigation reserves space before JS populates it, preventing a layout shift (CLS) on first paint when no explicit Min Height is set.<\/li>\n<li>Fixed: Character\/Word truncation modes now set <code>aria-label<\/code> with the full heading text whenever the visible label is shortened, so screen reader users get the complete link purpose rather than the clipped text.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Fixed: <code>frontend\/element_ready<\/code> hook registration could silently fail to fire when Elementor's own frontend script loaded after this plugin's script (e.g. under deferred\/module script loading). Registration is now timing-safe in both directions.<\/li>\n<li>Fixed: item padding was ignored on the trailing side when \"Truncate Long Titles\" was enabled; truncation now applies to an inner label element instead of the clickable link itself.<\/li>\n<li>Added: \"Truncate By\" option \u2014 truncate by pixel width, character count, or word count.<\/li>\n<li>Added: \"Truncation Style\" option \u2014 ellipsis (\u2026) or a soft fade-out mask, both RTL-aware.<\/li>\n<li>Added: per-heading custom label override via a <code>data-toc-label<\/code> custom attribute (Elementor Advanced \u2192 Attributes), letting editors shorten a specific item's label without relying on truncation.<\/li>\n<li>Added: <code>Requires Plugins: elementor<\/code> plugin header for native WordPress dependency handling (WP 6.5+).<\/li>\n<li>Changed: default Heading Levels is now H2 only (previously H2 + H3).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"A horizontal Table of Contents widget for Elementor.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/353573","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=353573"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hadiomid"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=353573"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=353573"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=353573"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=353573"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=353573"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=353573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}