{"id":255570,"date":"2025-11-01T05:12:49","date_gmt":"2025-11-01T05:12:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/init-reading-position\/"},"modified":"2025-11-12T06:47:42","modified_gmt":"2025-11-12T06:47:42","slug":"init-reading-position","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/init-reading-position\/","author":14479633,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2","stable_tag":"1.2","tested":"6.9.4","requires":"5.5","requires_php":"7.4","requires_plugins":null,"header_name":"Init Reading Position","header_author":"Init HTML","header_description":"Remembers where readers left off in a post and automatically scrolls back to that spot when they return. Lightweight, localStorage-based.","assets_banners_color":"dfcfd8","last_updated":"2025-11-12 06:47:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/inithtml.com\/plugin\/init-reading-position\/","header_author_uri":"https:\/\/inithtml.com\/","rating":0,"author_block_rating":0,"active_installs":60,"downloads":422,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"brokensmile.2103","date":"2025-11-01 05:12:36"},"1.1":{"tag":"1.1","author":"brokensmile.2103","date":"2025-11-05 06:24:32"},"1.2":{"tag":"1.2","author":"brokensmile.2103","date":"2025-11-12 06:47:42"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3387907,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3387907,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3387907,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3387907,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","1.1","1.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3390164,"resolution":"1","location":"assets","locale":""}},"screenshots":{"1":"Simple settings page \u2014 choose post types and optionally enter a CSS selector (e.g. <code>.entry-content<\/code>) to limit where reading progress is tracked."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[9342,225949,250074,790,3229],"plugin_category":[],"plugin_contributors":[242666],"plugin_business_model":[],"class_list":["post-255570","plugin","type-plugin","status-publish","hentry","plugin_tags-reading","plugin_tags-reading-progress","plugin_tags-resume-reading","plugin_tags-scroll","plugin_tags-usermeta","plugin_contributors-brokensmile2103-1","plugin_committers-brokensmile2103-1"],"banners":{"banner":"https:\/\/ps.w.org\/init-reading-position\/assets\/banner-772x250.png?rev=3387907","banner_2x":"https:\/\/ps.w.org\/init-reading-position\/assets\/banner-1544x500.png?rev=3387907","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/init-reading-position\/assets\/icon-128x128.png?rev=3387907","icon_2x":"https:\/\/ps.w.org\/init-reading-position\/assets\/icon-256x256.png?rev=3387907","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/init-reading-position\/assets\/screenshot-1.png?rev=3390164","caption":"Simple settings page \u2014 choose post types and optionally enter a CSS selector (e.g. <code>.entry-content<\/code>) to limit where reading progress is tracked."}],"raw_content":"<!--section=description-->\n<p>Init Reading Position enhances the reading experience by remembering how far a visitor has read on a post.<br \/>\nWhen they return, it automatically scrolls back to where they left off.<\/p>\n\n<p>Perfect for:<\/p>\n\n<ul>\n<li>Long-form articles<\/li>\n<li>Tutorials or guides<\/li>\n<li>Web novels or manga<\/li>\n<li>Any content where readers often stop and come back later<\/li>\n<\/ul>\n\n<p>This plugin is part of the <a href=\"https:\/\/en.inithtml.com\/init-plugin-suite-minimalist-powerful-and-free-wordpress-plugins\/\">Init Plugin Suite<\/a> \u2014 a collection of minimalist, fast, and developer-focused tools for WordPress.<\/p>\n\n<p>GitHub repository: <a href=\"https:\/\/github.com\/brokensmile2103\/init-reading-position\">https:\/\/github.com\/brokensmile2103\/init-reading-position<\/a><\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Saves scroll position using localStorage (guests) or user_meta (logged-in users)<\/li>\n<li>Smart device-based sync: remembers position separately for PC, Mobile, and Tablet<\/li>\n<li>Automatically scrolls back on page load<\/li>\n<li>Lightweight, no jQuery, no bloat<\/li>\n<li>Easy to extend via filters<\/li>\n<li>Optional settings page to control which post types are enabled<\/li>\n<\/ul>\n\n<h3>License<\/h3>\n\n<p>This plugin is licensed under the GPLv2 or later.<br \/>\nYou are free to use, modify, and distribute it under the same license.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install via Plugins \u2192 Add New.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>Settings \u2192 Reading Position<\/strong> and choose which post types should support this feature.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='does%20it%20sync%20across%20devices%3F'><h3>Does it sync across devices?<\/h3><\/dt>\n<dd><p>Yes. For logged-in users, scroll position is saved in user_meta, and stored separately for each device type (PC, Mobile, Tablet).<\/p><\/dd>\n<dt id='will%20it%20work%20with%20custom%20post%20types%3F'><h3>Will it work with custom post types?<\/h3><\/dt>\n<dd><p>Yes. You can enable it for any public post type in the plugin settings page.<\/p><\/dd>\n<dt id='will%20it%20slow%20down%20my%20site%3F'><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>No. It only runs a small JS script on enabled single pages and stores data efficiently.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2 \u2013 November 12, 2025<\/h4>\n\n<ul>\n<li>Added: Support for multiple CSS selectors separated by commas (e.g. <code>.entry-content, .post-content, #main<\/code>)<\/li>\n<li>Added: Option \u201cAuto-clear saved position at content end\u201d (enabled by default)<\/li>\n<li>Improved: Scroll tracking now activates if the reader is inside <em>any<\/em> of the configured selector areas<\/li>\n<li>Improved: Percent calculation prioritizes the selector in scope, falls back to whole page when outside all selectors<\/li>\n<li>Behavior: When auto-clear is enabled, progress is cleared at the end of the content area; when disabled, it falls back to clearing at page end<\/li>\n<li>Zero breaking changes \u2014 existing settings, localStorage keys, and user_meta structure remain compatible<\/li>\n<\/ul>\n\n<h4>1.1 \u2013 November 5, 2025<\/h4>\n\n<ul>\n<li>Added: CSS Selector option \u2014 plugin now only tracks progress inside the selected content area (e.g. <code>.entry-content<\/code>)<\/li>\n<li>Added: i18n ready strings for new settings field (English + Vietnamese translations included)<\/li>\n<li>Improved: Scroll position tracking logic \u2014 no longer saves progress when user scrolls outside the selected content area (e.g. comments section)<\/li>\n<li>Improved: Cleanup behavior \u2014 scroll progress is deleted only when reaching end of the page, never based on selector range<\/li>\n<li>No breaking changes \u2014 keeps old localStorage keys and user meta structure<\/li>\n<li>Updated: Admin settings page UI\/UX (placeholder instead of default selector)<\/li>\n<\/ul>\n\n<h4>1.0 \u2013 May 20, 2025<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Saves scroll position using localStorage (guests) and user meta (logged-in users)<\/li>\n<li>Auto-scrolls back to last position on load<\/li>\n<li>Per-device storage (PC, Mobile, Tablet)<\/li>\n<li>Settings page to choose post types<\/li>\n<li>Filter <code>init_plugin_suite_reading_position_delay<\/code> to adjust debounce time<\/li>\n<\/ul>","raw_excerpt":"Remembers reading position and auto-scrolls when returning. Works for guests (localStorage) and logged-in users (user meta, per device).","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/255570","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=255570"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brokensmile2103-1"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=255570"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=255570"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=255570"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=255570"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=255570"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=255570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}