{"id":253860,"date":"2025-09-30T04:17:57","date_gmt":"2025-09-30T04:17:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/init-recent-comments\/"},"modified":"2026-10-02T08:31:46","modified_gmt":"2026-10-02T08:31:46","slug":"init-recent-comments","status":"publish","type":"plugin","link":"https:\/\/fur.wordpress.org\/plugins\/init-recent-comments\/","author":14479633,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.1","stable_tag":"2.0.1","tested":"7.1.2","requires":"6.9","requires_php":"7.4","requires_plugins":null,"header_name":"Init Recent Comments","header_author":"Init HTML","header_description":"Display recent comments with customizable templates and clean CSS. Lightweight, flexible, and built for modern WordPress sites.","assets_banners_color":"90cc52","last_updated":"2026-10-02 08:31:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/inithtml.com\/plugin\/init-recent-comments\/","header_author_uri":"https:\/\/inithtml.com\/","rating":0,"author_block_rating":0,"active_installs":60,"downloads":1472,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"brokensmile.2103","date":"2025-09-30 04:21:37","revision":3370091},"1.1":{"tag":"1.1","author":"brokensmile.2103","date":"2025-10-01 05:20:42","revision":3370839},"1.2":{"tag":"1.2","author":"brokensmile.2103","date":"2025-10-12 08:30:45","revision":3376861},"1.3":{"tag":"1.3","author":"brokensmile.2103","date":"2025-11-03 14:00:02","revision":3388916},"1.4":{"tag":"1.4","author":"brokensmile.2103","date":"2025-11-05 11:35:24","revision":3390378},"1.4.1":{"tag":"1.4.1","author":"brokensmile.2103","date":"2026-05-17 16:04:24","revision":3534667},"1.5":{"tag":"1.5","author":"brokensmile.2103","date":"2026-07-21 15:33:51","revision":3617392},"2.0.0":{"tag":"2.0.0","author":"brokensmile.2103","date":"2026-08-05 05:27:10","revision":3634847},"2.0.1":{"tag":"2.0.1","author":"brokensmile.2103","date":"2026-10-02 08:31:46","revision":3724368}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3370090,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3370090,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3370090,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3370090,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"init-recent-comments\/user-recent-reviews":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"init-recent-comments\/user-recent-reviews","title":"User Recent Reviews","category":"init-recent-comments","icon":"star-half","description":"Insert the most recent reviews submitted by a specific user. Requires Init Review System.","keywords":["reviews","user","author","init"],"textdomain":"init-recent-comments","attributes":{"userId":{"type":"number","default":0},"number":{"type":"number","default":5},"status":{"type":"string","default":"approved"},"maxHeight":{"type":"string","default":""},"theme":{"type":"string","default":""},"paged":{"type":"number","default":0}},"supports":{"html":false,"className":false,"customClassName":false},"editorScript":"init-recent-comments-blocks-editor","style":"init-recent-comments-style","render":"file:.\/render.php"},"init-recent-comments\/recent-comments":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"init-recent-comments\/recent-comments","title":"Recent Comments","category":"init-recent-comments","icon":"admin-comments","description":"Insert the most recent approved comments site-wide.","keywords":["comments","recent","init"],"textdomain":"init-recent-comments","attributes":{"number":{"type":"number","default":5},"maxHeight":{"type":"string","default":""},"theme":{"type":"string","default":""},"paged":{"type":"number","default":0}},"supports":{"html":false,"className":false,"customClassName":false},"editorScript":"init-recent-comments-blocks-editor","style":"init-recent-comments-style","render":"file:.\/render.php"},"init-recent-comments\/recent-reviews":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"init-recent-comments\/recent-reviews","title":"Recent Reviews","category":"init-recent-comments","icon":"star-filled","description":"Insert the most recent approved reviews site-wide. Requires Init Review System.","keywords":["reviews","recent","init"],"textdomain":"init-recent-comments","attributes":{"number":{"type":"number","default":5},"maxHeight":{"type":"string","default":""},"theme":{"type":"string","default":""},"paged":{"type":"number","default":0}},"supports":{"html":false,"className":false,"customClassName":false},"editorScript":"init-recent-comments-blocks-editor","style":"init-recent-comments-style","render":"file:.\/render.php"},"init-recent-comments\/user-recent-comments":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"init-recent-comments\/user-recent-comments","title":"User Recent Comments","category":"init-recent-comments","icon":"admin-users","description":"Insert the most recent approved comments by a specific user.","keywords":["comments","user","author","init"],"textdomain":"init-recent-comments","attributes":{"userId":{"type":"number","default":0},"userLogin":{"type":"string","default":""},"userEmail":{"type":"string","default":""},"number":{"type":"number","default":5},"maxHeight":{"type":"string","default":""},"theme":{"type":"string","default":""},"paged":{"type":"number","default":0}},"supports":{"html":false,"className":false,"customClassName":false},"editorScript":"init-recent-comments-blocks-editor","style":"init-recent-comments-style","render":"file:.\/render.php"}},"tagged_versions":["1.0","1.1","1.2","1.3","1.4","1.4.1","1.5","2.0.0","2.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3617392,"resolution":"1","location":"assets","locale":"","width":624,"height":243}},"screenshots":{"1":"Settings page with CSS toggle"}},"plugin_section":[],"plugin_tags":[107,4429,80,975,162],"plugin_category":[43,44],"plugin_contributors":[242666],"plugin_business_model":[],"class_list":["post-253860","plugin","type-plugin","status-publish","hentry","plugin_tags-comments","plugin_tags-recent-comments","plugin_tags-shortcode","plugin_tags-template","plugin_tags-widget","plugin_category-customization","plugin_category-discussion-and-community","plugin_contributors-brokensmile2103-1","plugin_committers-brokensmile2103-1"],"banners":{"banner":"https:\/\/ps.w.org\/init-recent-comments\/assets\/banner-772x250.png?rev=3370090","banner_2x":"https:\/\/ps.w.org\/init-recent-comments\/assets\/banner-1544x500.png?rev=3370090","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/init-recent-comments\/assets\/icon-128x128.png?rev=3370090","icon_2x":"https:\/\/ps.w.org\/init-recent-comments\/assets\/icon-256x256.png?rev=3370090","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/init-recent-comments\/assets\/screenshot-1.png?rev=3617392","caption":"Settings page with CSS toggle"}],"raw_content":"<!--section=description-->\n<p><strong>Init Recent Comments<\/strong> is a developer-friendly plugin that lets you display the latest comments anywhere via a simple shortcode. It uses clean HTML, minimal CSS, and fully customizable templates.<\/p>\n\n<p>No widgets, no bloated options. Just lightweight, extendable code \u2014 made for real sites, with native Block Editor support and Abilities API integration for the next generation of automation tools.<\/p>\n\n<p>Key design goals:<\/p>\n\n<ul>\n<li>Native Block Editor blocks, one per shortcode, with live preview<\/li>\n<li>Abilities API support (WordPress 6.9+) for AI agents and automation tools<\/li>\n<li>Templated rendering with override support from themes<\/li>\n<li>Clean CSS you can disable or replace<\/li>\n<li>REST-ready architecture (future-proof)<\/li>\n<li>No jQuery, no nonsense<\/li>\n<\/ul>\n\n<p>Perfect for blogs, news sites, or anyone who wants a better way to show active discussions.<\/p>\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-recent-comments\">https:\/\/github.com\/brokensmile2103\/init-recent-comments<\/a><\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Block Editor (Gutenberg) blocks: Recent Comments, Recent Reviews, User Recent Comments, User Recent Reviews \u2014 each with a live server-side preview in the editor<\/li>\n<li>Abilities API (WordPress 6.9+): all 4 shortcodes' data exposed as discoverable, executable abilities via <code>wp_get_abilities()<\/code> and the <code>wp-abilities\/v1<\/code> REST namespace<\/li>\n<li>Simple shortcode: <code>[init_plugin_suite_recent_comments]<\/code> (legacy alias: <code>[init_recent_comments]<\/code>)<\/li>\n<li>Shortcode for displaying recent reviews: <code>[init_plugin_suite_recent_reviews]<\/code> (legacy alias: <code>[init_recent_reviews]<\/code>)<\/li>\n<li>Shortcode for displaying recent comments of a specific user: <code>[init_plugin_suite_user_recent_comments]<\/code> (legacy alias: <code>[init_user_recent_comments]<\/code>)<\/li>\n<li>Shortcode for displaying recent reviews of a specific user: <code>[init_plugin_suite_user_recent_reviews]<\/code> (legacy alias: <code>[init_user_recent_reviews]<\/code>)<\/li>\n<li>Template-based rendering (<code>comment-item.php<\/code>, <code>wrapper.php<\/code>)<\/li>\n<li>CSS can be disabled to use your theme's design<\/li>\n<li>No widgets, no jQuery, no frontend bloat<\/li>\n<li>Developer-ready: extend with filters, REST, and lazy loading (planned)<\/li>\n<li>Translation-ready (<code>.pot<\/code> included)<\/li>\n<\/ul>\n\n<h3>Block Editor (Gutenberg)<\/h3>\n\n<p>Four dynamic blocks are available under their own <strong>Init Recent Comments<\/strong> category in the block inserter \u2014 no shortcodes needed if you prefer working entirely in the editor:<\/p>\n\n<ul>\n<li><strong>Recent Comments<\/strong> \u2014 equivalent to <code>[init_plugin_suite_recent_comments]<\/code><\/li>\n<li><strong>Recent Reviews<\/strong> \u2014 equivalent to <code>[init_plugin_suite_recent_reviews]<\/code><\/li>\n<li><strong>User Recent Comments<\/strong> \u2014 equivalent to <code>[init_plugin_suite_user_recent_comments]<\/code><\/li>\n<li><strong>User Recent Reviews<\/strong> \u2014 equivalent to <code>[init_plugin_suite_user_recent_reviews]<\/code><\/li>\n<\/ul>\n\n<p>Each block shares the exact same rendering code as its shortcode, so switching between the Block Editor and shortcodes never changes the output. Block settings map directly to shortcode attributes, and a live preview is shown right in the editor as you configure it.<\/p>\n\n<h3>Abilities API (WordPress 6.9+)<\/h3>\n\n<p>On WordPress 6.9 and above, Init Recent Comments registers four read-only abilities under the <code>init-recent-comments<\/code> category \u2014 <code>get-recent-comments<\/code>, <code>get-recent-reviews<\/code>, <code>get-user-recent-comments<\/code>, and <code>get-user-recent-reviews<\/code> \u2014 mirroring the plugin's four shortcodes exactly. This plugin has no write actions at all (it's a pure display plugin), so all of its functionality is safely exposed. These abilities are discoverable and executable via PHP (<code>wp_get_abilities()<\/code>), and \u2014 for sites that opt in \u2014 the <code>wp-abilities\/v1<\/code> REST namespace. This integration is fully optional: on WordPress versions older than 6.9, it silently does nothing and the rest of the plugin is unaffected.<\/p>\n\n<p>Privacy note: looking up guest comments by <code>user_email<\/code> through <code>get-user-recent-comments<\/code> requires the <code>moderate_comments<\/code> capability, and <code>get-user-recent-reviews<\/code> only returns non-approved reviews (<code>pending<\/code>, <code>rejected<\/code>, ...) to users with <code>manage_options<\/code>. Everything else stays public, exactly like the shortcodes.<\/p>\n\n<h3>Usage<\/h3>\n\n<p>Prefer working in the Block Editor? Each shortcode below has an equivalent block \u2014 see the \"Block Editor (Gutenberg)\" section above.<\/p>\n\n<p>Use the shortcode anywhere:<\/p>\n\n<pre><code>[init_plugin_suite_recent_comments number=\"5\" maxheight=\"400px\"]\n<\/code><\/pre>\n\n<p>Recent reviews:<\/p>\n\n<pre><code>[init_plugin_suite_recent_reviews number=\"5\"]\n<\/code><\/pre>\n\n<p>Recent comments of a specific user:<\/p>\n\n<pre><code>[init_plugin_suite_user_recent_comments user_id=\"123\"]\n<\/code><\/pre>\n\n<p>Recent reviews of a specific user:<\/p>\n\n<pre><code>[init_plugin_suite_user_recent_reviews user_id=\"123\"]\n<\/code><\/pre>\n\n<p>The legacy tags <code>[init_recent_comments]<\/code>, <code>[init_recent_reviews]<\/code>, <code>[init_user_recent_comments]<\/code>, and <code>[init_user_recent_reviews]<\/code> still work exactly the same way, for backward compatibility with existing content.<\/p>\n\n<p>Attributes:<\/p>\n\n<ul>\n<li><code>number<\/code> \u2013 Total items to show (default: 5)<\/li>\n<li><code>maxheight<\/code> \u2013 Optional max height with scroll and hidden scrollbar (example: <code>300px<\/code>)<\/li>\n<li><code>paged<\/code> \u2013 Optional pagination<\/li>\n<li><code>theme<\/code> \u2013 Light or dark (example: <code>theme=\"dark\"<\/code>)<\/li>\n<li>For user shortcodes: <code>user_id<\/code>, <code>user_login<\/code>, or <code>user_email<\/code> can be used to target the user<\/li>\n<\/ul>\n\n<p>To override templates, create the folder in your theme:<\/p>\n\n<pre><code>your-theme\/\n\u2514\u2500\u2500 init-recent-comments\/\n    \u251c\u2500\u2500 wrapper.php\n    \u251c\u2500\u2500 review-wrapper.php\n    \u251c\u2500\u2500 comment-item.php\n    \u2514\u2500\u2500 review-item.php&lt;h3&gt;Filters for Developers&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>This plugin provides multiple filters to help developers customize caching behavior and performance for recent comments, reviews, and total comment count queries.<\/p>\n\n<p><strong>By default, comment\/review queries are NOT cached (TTL = 0)<\/strong> so newly posted comments always show up immediately \u2014 this is intentional, since most sites using this plugin expect real-time freshness. If your site has heavy traffic and you're fine with a short delay before new comments appear, you can enable caching yourself using the filters below (a value like <code>60<\/code> for 60 seconds is a reasonable starting point). Total comment count queries default to a 5-minute TTL instead, since counts are less time-sensitive.<\/p>\n\n<pre><code>init_plugin_suite_recent_comments_ttl  \n<\/code><\/pre>\n\n<p>Control the cache TTL (in seconds) for recent comments.<br \/>\nApplies to: Recent Comments Query<br \/>\nParams: <code>int $ttl<\/code><\/p>\n\n<pre><code>init_plugin_suite_recent_comments_query_args  \n<\/code><\/pre>\n\n<p>Allows developers to modify or extend the WP_Comment query arguments before the query runs.<br \/>\nApplies to: Recent Comments Query<br \/>\nParams: <code>array $args<\/code><\/p>\n\n<pre><code>init_plugin_suite_recent_reviews_ttl  \n<\/code><\/pre>\n\n<p>Control the cache TTL (in seconds) for recent reviews.<br \/>\nApplies to: Recent Reviews Query<br \/>\nParams: <code>int $ttl<\/code><\/p>\n\n<pre><code>init_plugin_suite_user_recent_comments_ttl  \n<\/code><\/pre>\n\n<p>Control cache TTL (in seconds) for recent comments by a specific user.<br \/>\nApplies to: <code>[init_user_recent_comments]<\/code><br \/>\nParams: <code>int $ttl<\/code>, <code>array $args<\/code><\/p>\n\n<pre><code>init_plugin_suite_user_recent_reviews_ttl  \n<\/code><\/pre>\n\n<p>Control cache TTL (in seconds) for recent reviews by a specific user.<br \/>\nApplies to: <code>[init_user_recent_reviews]<\/code><br \/>\nParams: <code>int $ttl<\/code>, <code>array $args<\/code><\/p>\n\n<pre><code>init_plugin_suite_total_comments_ttl  \n<\/code><\/pre>\n\n<p>Control the cache TTL (in seconds) for total approved comment counts by post type.<br \/>\nApplies to: Total Comments Query<br \/>\nParams: <code>int $ttl<\/code>, <code>array $post_types<\/code><\/p>\n\n<pre><code>init_plugin_suite_total_by_posts_ttl  \n<\/code><\/pre>\n\n<p>Control the cache TTL (in seconds) for total approved comment counts across multiple post IDs.<br \/>\nApplies to: Total by Post IDs Query<br \/>\nParams: <code>int $ttl<\/code>, <code>array $post_ids<\/code><\/p>\n\n<pre><code>init_plugin_suite_recent_comments_visible_reviews  \n<\/code><\/pre>\n\n<p>Filter the list of reviews after reviews on non-public posts (draft, pending, private, deleted) have been removed.<br \/>\nApplies to: Recent Reviews and User Recent Reviews<br \/>\nParams: <code>array $visible<\/code>, <code>array $reviews<\/code><\/p>\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><\/li>\n<li>Activate via <strong>Plugins \u2192 Init Recent Comments<\/strong><\/li>\n<li>Use the shortcode <code>[init_plugin_suite_recent_comments]<\/code> in any page or widget<\/li>\n<li>Optional: Visit <strong>Settings \u2192 Init Recent Comments<\/strong> to disable built-in CSS<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20disable%20the%20plugin%E2%80%99s%20css%3F\"><h3>Can I disable the plugin\u2019s CSS?<\/h3><\/dt>\n<dd><p>Yes! Go to <strong>Settings \u2192 Init Recent Comments<\/strong> and check the box to disable built-in styling.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20comment%20html%3F\"><h3>Can I customize the comment HTML?<\/h3><\/dt>\n<dd><p>Absolutely. Copy <code>templates\/comment-item.php<\/code> and <code>templates\/wrapper.php<\/code> to your theme to override the output.<\/p><\/dd>\n<dt id=\"will%20this%20plugin%20slow%20down%20my%20site%3F\"><h3>Will this plugin slow down my site?<\/h3><\/dt>\n<dd><p>No. It uses <code>get_comments()<\/code> with sane defaults, loads related posts, users, and parent comments in batches (no per-item queries), and adds no front-end JavaScript.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.1 \u2013 October 2, 2026<\/h4>\n\n<ul>\n<li><strong>Security<\/strong>: recent comments (shortcodes, blocks, and abilities) now only include comments on published posts \u2014 the same rule as WordPress core's Recent Comments widget. Previously, approved comments on private or draft posts (and those posts' titles) could be shown publicly. The query can still be customized through <code>init_plugin_suite_recent_comments_query_args<\/code> \/ <code>init_plugin_suite_user_recent_comments_query_args<\/code><\/li>\n<li><strong>Security<\/strong>: recent reviews (from Init Review System) now skip reviews whose post isn't publicly viewable (draft, pending, private, deleted), so those post titles, links, and review contents are no longer exposed. New filter <code>init_plugin_suite_recent_comments_visible_reviews<\/code> lets developers adjust the result<\/li>\n<li><strong>Security (Abilities API)<\/strong>: <code>get-user-recent-comments<\/code> only allows looking up guest comments by <code>user_email<\/code> for users who can moderate comments, so the public endpoint can no longer be used to match email addresses to commenters. Lookups by <code>user_id<\/code> \/ <code>user_login<\/code> are unchanged<\/li>\n<li><strong>Security (Abilities API)<\/strong>: <code>get-user-recent-reviews<\/code> only returns non-approved reviews (<code>pending<\/code>, <code>rejected<\/code>, ...) to users with the <code>manage_options<\/code> capability (the same capability Init Review System uses for review management). Approved reviews stay public<\/li>\n<li><strong>Fix<\/strong>: the <code>maxheight<\/code> attribute (and the block's \"Max Height\" setting) is now actually applied (e.g. <code>maxheight=\"300px\"<\/code>). Previously the value was ignored and the list was always capped at 650px. Values that aren't a plain number + unit (px, em, rem, vh, vw, %) keep the old 650px behavior<\/li>\n<li><strong>Fix<\/strong>: the \"Disable built-in CSS\" option now also applies to the four blocks \u2014 previously a page using a block still loaded the plugin's stylesheet even with the option on<\/li>\n<li><strong>Fix<\/strong>: review links were double-escaped, breaking post URLs that contain query strings (e.g. <code>&amp;<\/code> in plain permalinks)<\/li>\n<li><strong>Fix<\/strong>: \"time ago\" values are now calculated from GMT timestamps instead of the deprecated <code>current_time( 'timestamp' )<\/code> pattern, so they stay correct across timezones and DST<\/li>\n<li><strong>Fix<\/strong>: the Shortcode Builder's Copy \/ Close buttons and \"Shortcode Preview\" label are now translated (the script read the wrong i18n object), Copy also works on non-HTTPS admin screens, and labels are inserted as text instead of HTML \u2014 synced with the Init Review System 2.0.1 builder<\/li>\n<li><strong>Fix<\/strong>: the user shortcodes no longer leave an unclosed output buffer when a template file can't be found<\/li>\n<li><strong>Fix<\/strong>: the settings sanitizer now respects a <code>disable_css<\/code> value of <code>0<\/code> set programmatically<\/li>\n<li><strong>Fix<\/strong>: the Block Editor script now declares its <code>wp-data<\/code> dependency<\/li>\n<li><strong>Performance<\/strong>: posts, users, and parent comments are now loaded in batches before rendering \u2014 about 6 database queries instead of ~33 for 10 comments (and 5 instead of ~32 for 10 reviews) on sites without a persistent object cache<\/li>\n<li><strong>Performance<\/strong>: template files are located once per request instead of once per item<\/li>\n<li><strong>Performance<\/strong>: when caching is enabled through the TTL filters, cached lists are now invalidated automatically when comments, posts, or reviews change (using WordPress <code>last_changed<\/code> and Init Review System's cache version), so new comments show up immediately instead of after the TTL expires<\/li>\n<li><strong>Code quality<\/strong>: all PHP files now follow the WordPress Coding Standards (WPCS 3), matching the rest of the Init Plugin Suite<\/li>\n<li><strong>i18n<\/strong>: added the new strings to the <code>.pot<\/code> file and the Vietnamese translation<\/li>\n<\/ul>\n\n<h4>2.0.0 \u2013 August 4, 2026<\/h4>\n\n<ul>\n<li><strong>New: Abilities API support (WordPress 6.9+)<\/strong>: registers four read-only abilities under the <code>init-recent-comments<\/code> category \u2014 <code>get-recent-comments<\/code>, <code>get-recent-reviews<\/code>, <code>get-user-recent-comments<\/code>, and <code>get-user-recent-reviews<\/code> \u2014 mirroring all four shortcodes exactly. This plugin has no write actions, so all of its data is safely exposed. Discoverable and executable via PHP, <code>wp_get_abilities()<\/code>, and \u2014 when a site opts in \u2014 the <code>wp-abilities\/v1<\/code> REST namespace. Fully optional and backward-compatible: on WordPress versions older than 6.9, the integration silently does nothing<\/li>\n<li><strong>New: Block Editor (Gutenberg) support<\/strong>: four dynamic blocks, grouped under their own <strong>Init Recent Comments<\/strong> block category (instead of the generic \"Widgets\" category) \u2014 <strong>Recent Comments<\/strong>, <strong>Recent Reviews<\/strong>, <strong>User Recent Comments<\/strong>, and <strong>User Recent Reviews<\/strong>, matching the four existing shortcodes. Each block is registered via <code>block.json<\/code> (with a PHP <code>render.php<\/code> file wired through the <code>\"render\"<\/code> field, WP 6.1+) that calls the exact same shortcode function as its shortcode counterpart \u2014 no duplicated display logic, output always matches. The editor integration is a single, no-build-step vanilla JavaScript file using <code>wp.serverSideRender<\/code> for a live preview directly in the editor<\/li>\n<li><strong>Changed<\/strong>: <code>Requires at least<\/code> raised from 5.5 to 6.9 to support the Abilities API integration. <code>Requires PHP<\/code> remains 7.4<\/li>\n<li><strong>Tested up to: 7.1<\/strong><\/li>\n<\/ul>\n\n<h4>1.5 \u2013 July 21, 2026<\/h4>\n\n<ul>\n<li>Shortcode Builder in the admin settings page now generates the prefixed shortcodes (<code>[init_plugin_suite_recent_comments]<\/code>, <code>[init_plugin_suite_recent_reviews]<\/code>, <code>[init_plugin_suite_user_recent_comments]<\/code>, <code>[init_plugin_suite_user_recent_reviews]<\/code>) by default; legacy tags remain fully supported<\/li>\n<li>Updated documentation to use the prefixed shortcodes as the primary examples, with legacy tags noted as backward-compatible aliases<\/li>\n<li>Uninstall routine now reliably removes the plugin's settings option<\/li>\n<li>Documented the default caching behavior (TTL = 0 for comments\/reviews) in the Filters for Developers section<\/li>\n<li>Internal code cleanup for readability and maintainability<\/li>\n<\/ul>\n\n<h4>1.4 \u2013 November 5, 2025<\/h4>\n\n<ul>\n<li>Introduced new user-specific shortcodes:\n\n<ul>\n<li><code>[init_plugin_suite_user_recent_comments]<\/code> \u2014 display recent comments made by a specific user<\/li>\n<li><code>[init_plugin_suite_user_recent_reviews]<\/code> \u2014 display recent reviews made by a specific user<\/li>\n<li>Backward-compat maintained: <code>[init_user_recent_comments]<\/code> and <code>[init_user_recent_reviews]<\/code><\/li>\n<\/ul><\/li>\n<li>Both shortcodes reuse existing template system (wrapper.php \/ review-wrapper.php), ensuring UI consistency<\/li>\n<li>Fully supports pagination, theme mode, max height, and query argument overriding through filters<\/li>\n<li>Added new helpers for fetching user data:\n\n<ul>\n<li><code>init_plugin_suite_recent_comments_get_user_comments()<\/code><\/li>\n<li><code>init_plugin_suite_recent_comments_get_user_reviews()<\/code><\/li>\n<\/ul><\/li>\n<li>Implemented separate cache groups for user comments &amp; user reviews\n\n<ul>\n<li>TTL fully customizable via filters (<code>init_plugin_suite_user_recent_comments_ttl<\/code>, <code>init_plugin_suite_user_recent_reviews_ttl<\/code>)<\/li>\n<\/ul><\/li>\n<li>Updated review item template:\n\n<ul>\n<li>Display reviewer name and avatar resolved from <code>user_id<\/code> instead of relying on non-existing <code>author_name<\/code><\/li>\n<li>Fallback support for anonymous reviewers<\/li>\n<\/ul><\/li>\n<li>Internal improvements and cleanup for code reliability and maintainability<\/li>\n<\/ul>\n\n<h4>1.3 \u2013 November 4, 2025<\/h4>\n\n<ul>\n<li>Added new filter <code>init_plugin_suite_recent_comments_query_args<\/code> allows developers to modify or extend the comment query args before running <code>get_comments()<\/code><\/li>\n<li>Improved recent comments retrieval function:\n\n<ul>\n<li>Supports overriding query parameters via filter (e.g., filter by <code>post_type<\/code>, change <code>number<\/code>, include <code>meta_query<\/code>, etc.)<\/li>\n<li>Maintains full backward compatibility<\/li>\n<\/ul><\/li>\n<li>UI update for Reply-to context:\n\n<ul>\n<li>Recent comment items now display \"Replying to {Author}\" when the comment has a parent<\/li>\n<li>Added minimal CSS styling (non-intrusive, inherits container background)<\/li>\n<\/ul><\/li>\n<li>Codebase refinements:\n\n<ul>\n<li>Minor internal cleanups for readability and maintainability<\/li>\n<li>Consistent filter naming across features to match the plugin's prefix standard<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.2 \u2013 October 12, 2025<\/h4>\n\n<ul>\n<li>Enhanced caching flexibility for existing functions:\n\n<ul>\n<li>Added TTL filter support to init_plugin_suite_recent_comments_get_comments()<\/li>\n<li>Added TTL filter support to init_plugin_suite_recent_comments_get_reviews()<\/li>\n<li>Added TTL filter support to init_plugin_suite_recent_comments_get_total_comments()<\/li>\n<\/ul><\/li>\n<li>Introduced new helper function init_plugin_suite_recent_comments_get_total_by_posts() for counting total approved comments across multiple post IDs<\/li>\n<li>Separated cache group for comment totals (<code>init_comment_totals<\/code>) to improve cache isolation and performance<\/li>\n<li>Developers can now customize cache durations via filters<\/li>\n<li>Default TTL values remain unchanged (0 for comments\/reviews, 5 minutes for totals)<\/li>\n<li>Minor internal optimizations for stability and consistency<\/li>\n<\/ul>\n\n<h4>1.1 \u2013 October 1, 2025<\/h4>\n\n<ul>\n<li>Added new shortcode <code>[init_recent_reviews]<\/code> for displaying recent reviews  <\/li>\n<li>Introduced prefixed shortcodes <code>[init_plugin_suite_recent_comments]<\/code> and <code>[init_plugin_suite_recent_reviews]<\/code> for better naming consistency  <\/li>\n<li>Maintained backward compatibility: old shortcodes <code>[init_recent_comments]<\/code> and <code>[init_recent_reviews]<\/code> still work  <\/li>\n<li>Added template override support for review wrapper (<code>init-recent-comments\/review-wrapper.php<\/code>)  <\/li>\n<li>Unified CSS handling and options across both comments and reviews shortcodes  <\/li>\n<\/ul>\n\n<h4>1.0 \u2013 June 16, 2025<\/h4>\n\n<ul>\n<li>Initial release  <\/li>\n<li>Static shortcode <code>[init_recent_comments]<\/code>  <\/li>\n<li>Basic settings page to toggle CSS  <\/li>\n<li>Template override support  <\/li>\n<li>Clean CSS with disable option<\/li>\n<\/ul>","raw_excerpt":"Display recent comments with customizable templates, Block Editor blocks, Abilities API support, and clean CSS.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/253860","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=253860"}],"author":[{"embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brokensmile2103-1"}],"wp:attachment":[{"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=253860"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=253860"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=253860"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=253860"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=253860"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=253860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}