{"id":303224,"date":"2026-05-25T03:10:48","date_gmt":"2026-05-25T03:10:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/read-o-meter\/"},"modified":"2026-05-25T13:32:34","modified_gmt":"2026-05-25T13:32:34","slug":"optic-read-o-meter","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/optic-read-o-meter\/","author":23485480,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"6.3","requires_php":"7.2","requires_plugins":null,"header_name":"Optic Read-O-Meter","header_author":"Arun Brahma","header_description":"Adds an estimated reading time above post content with style \/ color \/ position options, a [optrom_reading_time] shortcode, and a Gutenberg block.","assets_banners_color":"49645f","last_updated":"2026-05-25 13:32:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/arunbrahma.com\/optic-read-o-meter\/","header_author_uri":"https:\/\/arunbrahma.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":33,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"arunbrahma","date":"2026-05-25 13:32:34"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3546907,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3546907,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3546907,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3546914,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3546914,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3547696,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/the-quiet-power-of-a-calm-morning\\\/\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"login\":true,\"steps\":[{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"Optic Read-O-Meter Demo\"}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n$slug = 'the-quiet-power-of-a-calm-morning';\\nif ( ! get_page_by_path( $slug, OBJECT, 'post' ) ) {\\n    wp_insert_post( array(\\n        'post_title'   => 'The Quiet Power of a Calm Morning',\\n        'post_name'    => $slug,\\n        'post_status'  => 'publish',\\n        'post_author'  => 1,\\n        'post_content' => '<!-- wp:paragraph --><p>A clear reading-time estimate answers one quiet question before a visitor commits a single minute: how much attention will this article ask of me? It is a small courtesy, and small courtesies are what make a blog feel considered rather than rushed.<\\\/p><!-- \\\/wp:paragraph --><!-- wp:paragraph --><p>Most readers decide whether to stay within the first few seconds. A short, honest label near the title removes the guesswork. It tells them this is a three-minute read, not a thirty-minute one, and lets them choose to settle in or save it for later.<\\\/p><!-- \\\/wp:paragraph --><!-- wp:heading --><h2 class=\\\"wp-block-heading\\\">Why an estimate beats a word count<\\\/h2><!-- \\\/wp:heading --><!-- wp:paragraph --><p>A raw word count means little to most people. Few of us think in thousands of words, but almost all of us think in minutes. Translating length into time is the difference between a number and a decision.<\\\/p><!-- \\\/wp:paragraph --><!-- wp:paragraph --><p>The math is unglamorous and that is the point. Count the words, divide by a sensible reading speed, round to something human. Two hundred words per minute is the steady newspaper average, and it holds up well across casual writing.<\\\/p><!-- \\\/wp:paragraph --><!-- wp:heading --><h2 class=\\\"wp-block-heading\\\">Images take time too<\\\/h2><!-- \\\/wp:heading --><!-- wp:paragraph --><p>Words are not the whole story. A reader lingers on images, charts, and pull quotes, and a fair estimate accounts for that pause. Adding a few seconds per image keeps the label honest on visual posts.<\\\/p><!-- \\\/wp:paragraph --><!-- wp:paragraph --><p>None of this should shout. The estimate is a guide, not a headline. Kept compact, calm, and aware of the theme around it, it reads as part of the post instead of a widget bolted on top.<\\\/p><!-- \\\/wp:paragraph --><!-- wp:paragraph --><p>Do that, and the reading-time badge stops being decoration. It becomes a quiet promise kept between writer and reader, made the moment the page loads.<\\\/p><!-- \\\/wp:paragraph -->',\\n    ) );\\n}\\nglobal $wp_rewrite;\\n$wp_rewrite->set_permalink_structure( '\\\/%postname%\\\/' );\\n$wp_rewrite->flush_rules( true );\\n\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"optic-read-o-meter\"},\"options\":{\"activate\":true}}]}"}},"all_blocks":{"optrom\/reading-time":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"optrom\/reading-time","title":"Reading Time","category":"widgets","icon":"clock","description":"Estimated reading time for the current post. Styled badge or plain text.","textdomain":"optic-read-o-meter","keywords":["reading","time","minutes","badge"],"supports":{"html":false,"multiple":true,"reusable":true},"usesContext":["postId"],"attributes":{"format":{"type":"string","default":"badge","enum":["badge","text"]},"template":{"type":"string","default":""}},"editorScript":"file:.\/index.js"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3547666,"resolution":"1","location":"assets","locale":"","width":2000,"height":1688},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3547666,"resolution":"2","location":"assets","locale":"","width":1639,"height":2000},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3547666,"resolution":"3","location":"assets","locale":"","width":1644,"height":748},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3547666,"resolution":"4","location":"assets","locale":"","width":2000,"height":1406},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3547666,"resolution":"5","location":"assets","locale":"","width":2000,"height":1688},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3547666,"resolution":"6","location":"assets","locale":"","width":2000,"height":1000}},"screenshots":{"1":"The reading-time badge above a post, Pill style with the Clock icon.","2":"The settings page: reading speed, display, appearance, and wording, with a live preview.","3":"Appearance options: badge style, icon, and seven one-click color palettes.","4":"The Reading Time block in the editor, with badge or plain-text output.","5":"A different look: Dark style with the Coffee icon.","6":"The [optrom_reading_time] shortcode, rendered inline anywhere."}},"plugin_section":[],"plugin_tags":[1220,15374,86,27629],"plugin_category":[],"plugin_contributors":[264246],"plugin_business_model":[],"class_list":["post-303224","plugin","type-plugin","status-publish","hentry","plugin_tags-block","plugin_tags-estimate","plugin_tags-post","plugin_tags-reading-time","plugin_contributors-arunbrahma","plugin_committers-arunbrahma"],"banners":{"banner":"https:\/\/ps.w.org\/optic-read-o-meter\/assets\/banner-772x250.png?rev=3546914","banner_2x":"https:\/\/ps.w.org\/optic-read-o-meter\/assets\/banner-1544x500.png?rev=3546914","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/optic-read-o-meter\/assets\/icon.svg?rev=3546907","icon":"https:\/\/ps.w.org\/optic-read-o-meter\/assets\/icon.svg?rev=3546907","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/optic-read-o-meter\/assets\/screenshot-1.png?rev=3547666","caption":"The reading-time badge above a post, Pill style with the Clock icon."},{"src":"https:\/\/ps.w.org\/optic-read-o-meter\/assets\/screenshot-2.png?rev=3547666","caption":"The settings page: reading speed, display, appearance, and wording, with a live preview."},{"src":"https:\/\/ps.w.org\/optic-read-o-meter\/assets\/screenshot-3.png?rev=3547666","caption":"Appearance options: badge style, icon, and seven one-click color palettes."},{"src":"https:\/\/ps.w.org\/optic-read-o-meter\/assets\/screenshot-4.png?rev=3547666","caption":"The Reading Time block in the editor, with badge or plain-text output."},{"src":"https:\/\/ps.w.org\/optic-read-o-meter\/assets\/screenshot-5.png?rev=3547666","caption":"A different look: Dark style with the Coffee icon."},{"src":"https:\/\/ps.w.org\/optic-read-o-meter\/assets\/screenshot-6.png?rev=3547666","caption":"The [optrom_reading_time] shortcode, rendered inline anywhere."}],"raw_content":"<!--section=description-->\n<p>Drops a small \"X min read\" line above each post on your site. Same little badge Medium uses and most blogs use.<\/p>\n\n<p>The plugin counts the words, divides by reading speed, prepends the badge above the content. That is the whole thing. No tracking, no upsells, no third-party scripts.<\/p>\n\n<p>What you can change from Settings, Optic Read-O-Meter:<\/p>\n\n<ul>\n<li>Words per minute (default 200, the global newspaper average).<\/li>\n<li>Style: pill, minimal, dark, outline, or none.<\/li>\n<li>Icon: clock, coffee, book, or none.<\/li>\n<li>Colors via the WordPress color picker, plus seven one-click palettes (Emerald, Sky, Rose, Amber, Violet, Slate, Dark).<\/li>\n<li>Position above, below, or both.<\/li>\n<li>Separate singular and plural templates, one for \"1 minute read\" and one for \"5 minutes read\".<\/li>\n<li>Optional image time. Each image adds 12 seconds by default, the same convention Medium uses.<\/li>\n<li>Minimum word count to skip the badge on short posts.<\/li>\n<li>Which post types get the auto-prepended badge.<\/li>\n<\/ul>\n\n<p>Per post, an editor sidebar lets you hide the badge for a specific post or set a manual minute count.<\/p>\n\n<p>A Reading Time Gutenberg block ships with the plugin. Drop it anywhere in the block editor and pick \"Styled badge\" or \"Plain text\" from the sidebar. There is also a shortcode for non-block contexts: <code>[optrom_reading_time]<\/code>, <code>[optrom_reading_time format=\"badge\"]<\/code>, or <code>[optrom_reading_time template=\"About %s\"]<\/code>.<\/p>\n\n<p>Performance: word and image counts are cached in post meta on save. After that, rendering reads one integer. No external HTTP, no analytics.<\/p>\n\n<p>For developers, two filters: <code>optrom_words_per_minute<\/code> to override the WPM per post, and <code>optrom_label<\/code> to replace the entire label string.<\/p>\n\n<p>The plugin cleans up after itself. Option and post meta are deleted on uninstall.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>optic-read-o-meter<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install from Plugins, Add New.<\/li>\n<li>Activate.<\/li>\n<li>Visit Settings, Optic Read-O-Meter to configure.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20change%20the%20reading%20speed%3F\"><h3>Can I change the reading speed?<\/h3><\/dt>\n<dd><p>Yes. Set it on the settings page, or hook the <code>optrom_words_per_minute<\/code> filter for per-post control.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20pages%20or%20custom%20post%20types%3F\"><h3>Does it work on pages or custom post types?<\/h3><\/dt>\n<dd><p>Yes. Tick the post types you want on the settings page. The default is posts only. The block and shortcode work everywhere regardless.<\/p><\/dd>\n<dt id=\"can%20i%20hide%20the%20badge%20on%20a%20single%20post%3F\"><h3>Can I hide the badge on a single post?<\/h3><\/dt>\n<dd><p>Yes. Each supported post type has a Reading Time meta box on the editor with a hide toggle and a manual minutes override.<\/p><\/dd>\n<dt id=\"my%20posts%20have%20lots%20of%20images.%20are%20they%20counted%3F\"><h3>My posts have lots of images. Are they counted?<\/h3><\/dt>\n<dd><p>Off by default. Tick \"Count images\" on the settings page if you want each image to add a few seconds to the estimate (12 by default, same as Medium).<\/p><\/dd>\n<dt id=\"does%20it%20support%20non-latin%20scripts%3F\"><h3>Does it support non-Latin scripts?<\/h3><\/dt>\n<dd><p>Yes. <code>str_word_count<\/code> covers most Latin scripts. For CJK and similar, the plugin falls back to a Unicode-aware split.<\/p><\/dd>\n<dt id=\"does%20it%20track%20visitors%3F\"><h3>Does it track visitors?<\/h3><\/dt>\n<dd><p>No. No tracking, no analytics, no external requests.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Auto-prepends a \"X min read\" badge on single-post views (and any other public post type you opt into).<\/li>\n<li>Reading Time Gutenberg block, with styled-badge or plain-text formats.<\/li>\n<li><code>[optrom_reading_time]<\/code> shortcode.<\/li>\n<li>Sectioned settings page with a live preview that updates as you tweak.<\/li>\n<li>Seven one-click color palettes (Emerald, Sky, Rose, Amber, Violet, Slate, Dark) and the WordPress color picker.<\/li>\n<li>Five styles (pill, minimal, dark, outline, none) and four icons (clock, coffee, book, none).<\/li>\n<li>Optional image-aware estimate (12 seconds per image by default).<\/li>\n<li>Separate singular and plural label templates.<\/li>\n<li>Per-post hide toggle and minute override.<\/li>\n<li>Word and image counts cached in post meta on save.<\/li>\n<li><code>uninstall.php<\/code> cleans up the plugin option and per-post meta.<\/li>\n<li>Filters: <code>optrom_words_per_minute<\/code>, <code>optrom_label<\/code>.<\/li>\n<\/ul>","raw_excerpt":"Drops an &quot;X min read&quot; line above your posts. Five styles, color palettes, image-aware time, plural wording, shortcode and block.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/303224","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=303224"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/arunbrahma"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=303224"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=303224"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=303224"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=303224"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=303224"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=303224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}