{"id":300646,"date":"2026-04-27T10:39:39","date_gmt":"2026-04-27T10:39:39","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/flow-editorial-review-content-approval-workflow\/"},"modified":"2026-05-08T08:53:41","modified_gmt":"2026-05-08T08:53:41","slug":"jumplinks-editorial-workflow","status":"publish","type":"plugin","link":"https:\/\/ug.wordpress.org\/plugins\/jumplinks-editorial-workflow\/","author":23481085,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.3.1","stable_tag":"1.3.1","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"JumpLinks Flow - Editorial Review & Content Approval Workflow","header_author":"JumpLinks Systems","header_description":"Editorial workflow and content approval plugin with inline comments and a familiar WordPress style review experience.","assets_banners_color":"175071","last_updated":"2026-05-08 08:53:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/jumplinks.net","rating":5,"author_block_rating":0,"active_installs":0,"downloads":336,"num_ratings":2,"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":"jumplinks","date":"2026-04-27 10:39:01"},"1.1.0":{"tag":"1.1.0","author":"jumplinks","date":"2026-04-28 10:14:31"},"1.1.1":{"tag":"1.1.1","author":"jumplinks","date":"2026-04-28 12:03:22"},"1.1.2":{"tag":"1.1.2","author":"jumplinks","date":"2026-04-28 12:12:46"},"1.1.3":{"tag":"1.1.3","author":"jumplinks","date":"2026-04-29 09:15:07"},"1.1.4":{"tag":"1.1.4","author":"jumplinks","date":"2026-04-29 09:49:29"},"1.1.5":{"tag":"1.1.5","author":"jumplinks","date":"2026-05-05 22:03:52"},"1.1.6":{"tag":"1.1.6","author":"jumplinks","date":"2026-05-05 22:19:33"},"1.1.7":{"tag":"1.1.7","author":"jumplinks","date":"2026-05-06 12:27:02"},"1.1.8":{"tag":"1.1.8","author":"jumplinks","date":"2026-05-06 14:39:54"},"1.2.0":{"tag":"1.2.0","author":"jumplinks","date":"2026-05-07 14:19:29"},"1.3.0":{"tag":"1.3.0","author":"jumplinks","date":"2026-05-07 21:42:23"},"1.3.1":{"tag":"1.3.1","author":"jumplinks","date":"2026-05-08 08:53:41"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3516313,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3516313,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3516313,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3516313,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3526350,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"JumpLinks Flow \\u2014 Demo Review Page\",\"description\":\"You're logged in as a reviewer. Select any text to leave an inline comment, use the sidebar for general feedback, or hit Approve when you're happy.\",\"author\":\"jumplinks\",\"categories\":[\"editorial\",\"workflow\"]},\"landingPage\":\"\\\/?flow_demo_go=1\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"jumplinks-editorial-workflow\"},\"options\":{\"activate\":true}},{\"step\":\"writeFile\",\"path\":\"\\\/wordpress\\\/wp-content\\\/mu-plugins\\\/flow-demo-go.php\",\"data\":\"<?php\\n\\\/\\\/ Demo helper: \\\/?flow_demo_go=1 \\u2192 redirects to the signed review URL\\n\\\/\\\/ generated by the runPHP step below. This indirection is needed because\\n\\\/\\\/ blueprint `landingPage` is static, but the review URL contains a\\n\\\/\\\/ signed token computed at runtime.\\nadd_action( 'init', function () {\\n\\tif ( ! isset( $_GET['flow_demo_go'] ) ) {\\n\\t\\treturn;\\n\\t}\\n\\t$url = get_option( 'flow_demo_review_url' );\\n\\tif ( $url ) {\\n\\t\\twp_safe_redirect( $url );\\n\\t\\texit;\\n\\t}\\n} );\\n\"},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\n\\\/\\\/ 1. Reviewer user (Editor role).\\nif ( ! get_user_by( 'login', 'reviewer' ) ) {\\n\\t$reviewer_id = wp_insert_user( [\\n\\t\\t'user_login'   => 'reviewer',\\n\\t\\t'user_pass'    => 'reviewer',\\n\\t\\t'user_email'   => 'reviewer@example.com',\\n\\t\\t'display_name' => 'Demo Reviewer',\\n\\t\\t'role'         => 'editor',\\n\\t] );\\n} else {\\n\\t$reviewer_id = get_user_by( 'login', 'reviewer' )->ID;\\n}\\n\\n\\\/\\\/ 2. Flow settings \\u2014 mark setup completed and (re-)assert reviewer-role + post-type\\n\\\/\\\/    options so cap sync runs and `editor` gets `flow_review_posts`.\\nupdate_option( 'flow_ew_setup_completed', true );\\nupdate_option( 'flow_ew_reviewer_roles', [ 'editor' ] );\\nupdate_option( 'flow_ew_supported_post_types', [ 'post', 'page' ] );\\n\\n\\\/\\\/ 3. Sample draft post (admin = id 1 as author and requester).\\n\\\/\\\/    HTML attributes use single quotes so the surrounding PHP double-quoted\\n\\\/\\\/    string (and the surrounding JSON encoding) doesn't need extra escaping.\\n$post_id = wp_insert_post( [\\n\\t'post_title'   => 'Welcome to the Flow Review Demo page',\\n\\t'post_content' => \\\"<!-- wp:paragraph --><p>You're logged in as the <strong>reviewer<\\\/strong>. Try the things below \\u2014 this whole page is the Flow review experience.<\\\/p><!-- \\\/wp:paragraph --><!-- wp:heading --><h2>What you can try<\\\/h2><!-- \\\/wp:heading --><!-- wp:list --><ul><li><strong>Select any text<\\\/strong> on this page \\u2014 an Add Comment popover appears next to your selection.<\\\/li><li><strong>Click on the image below<\\\/strong> to leave a comment anchored to that image.<\\\/li><li><strong>Open the comment sidebar<\\\/strong> on the right to leave a general comment.<\\\/li><li><strong>Click Approve or Request Changes<\\\/strong> in the top bar to take action.<\\\/li><\\\/ul><!-- \\\/wp:list --><!-- wp:heading --><h2>Comment on an image<\\\/h2><!-- \\\/wp:heading --><!-- wp:paragraph --><p>Image comments are useful when reviewing visual designs, screenshots, or photography. Click the image to leave feedback anchored to it.<\\\/p><!-- \\\/wp:paragraph --><!-- wp:image --><figure class='wp-block-image size-large'><img src='https:\\\/\\\/placehold.co\\\/800x400\\\/2271b1\\\/ffffff\\\/png?text=Click+me+to+leave+a+comment' alt='Demo image - click to leave a comment' \\\/><\\\/figure><!-- \\\/wp:image --><!-- wp:heading --><h2>Comment on a video<\\\/h2><!-- \\\/wp:heading --><!-- wp:paragraph --><p>Embed videos behave like images here \\u2014 click to leave a comment, not to play. Try clicking the video below.<\\\/p><!-- \\\/wp:paragraph --><!-- wp:html --><div style='text-align:center'><video controls preload='metadata' width='800' style='max-width:100%;aspect-ratio:16\\\/9' poster='https:\\\/\\\/placehold.co\\\/800x450\\\/2c3338\\\/ffffff\\\/png?text=Click+to+leave+a+comment'><source src='https:\\\/\\\/commondatastorage.googleapis.com\\\/gtv-videos-bucket\\\/sample\\\/ForBiggerBlazes.mp4' type='video\\\/mp4'><\\\/video><\\\/div><!-- \\\/wp:html --><!-- wp:heading --><h2>Try a longer paragraph<\\\/h2><!-- \\\/wp:heading --><!-- wp:paragraph --><p>Editorial review is most useful on real content \\u2014 paragraphs, headings, lists, the works. Highlight a sentence here and leave a suggestion. Inline comments anchor to the text you selected, so the conversation stays in context instead of getting lost in a long thread.<\\\/p><!-- \\\/wp:paragraph -->\\\",\\n\\t'post_status'  => 'draft',\\n\\t'post_author'  => 1,\\n] );\\n\\n\\\/\\\/ 4. Snapshot to a revision so the review preview has something stable to point at.\\nwp_save_post_revision( $post_id );\\n$revisions   = wp_get_post_revisions( $post_id, [ 'numberposts' => 1 ] );\\n$revision_id = ! empty( $revisions ) ? (int) reset( $revisions )->ID : 0;\\n\\n\\\/\\\/ 5. Create the review and move it to in_review state.\\n$review_id = \\\\Flow\\\\EditorialWorkflow\\\\Review::request( $post_id, $reviewer_id, 1 );\\n\\\\Flow\\\\EditorialWorkflow\\\\Review::send_for_review( $review_id, 1 );\\n\\n\\\/\\\/ 6. Generate the signed preview URL and stash it for the mu-plugin to read.\\n$preview_url = \\\\Flow\\\\EditorialWorkflow\\\\Review::get_preview_url( $review_id, $revision_id, $post_id );\\nupdate_option( 'flow_demo_review_url', $preview_url );\\n\"},{\"step\":\"login\",\"username\":\"reviewer\",\"password\":\"reviewer\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","1.2.0","1.3.0","1.3.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3516313,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3516313,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3516313,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3516313,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3516313,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3516313,"resolution":"6","location":"assets","locale":""},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3516313,"resolution":"7","location":"assets","locale":""}},"screenshots":{"1":"Settings screen for review mode, reviewer roles, and supported content types.","2":"Review panel in the block editor with workflow status and reviewer assignment.","3":"Review panel in the Classic Editor with workflow controls.","4":"Review panel in Elementor for editorial collaboration.","5":"Review page with general comments and threaded replies.","6":"Inline comments anchored to content on the review page.","7":"Highlighted content with contextual feedback on the review page."},"jetpack_post_was_ever_published":false},"plugin_section":[262246],"plugin_tags":[255415,261154,96456,6004],"plugin_category":[],"plugin_contributors":[261155],"plugin_business_model":[],"class_list":["post-300646","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-content-approval","plugin_tags-content-review","plugin_tags-editorial-workflow","plugin_tags-inline-comments","plugin_contributors-jumplinks","plugin_committers-jumplinks"],"banners":{"banner":"https:\/\/ps.w.org\/jumplinks-editorial-workflow\/assets\/banner-772x250.png?rev=3516313","banner_2x":"https:\/\/ps.w.org\/jumplinks-editorial-workflow\/assets\/banner-1544x500.png?rev=3516313","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/jumplinks-editorial-workflow\/assets\/icon-128x128.png?rev=3516313","icon_2x":"https:\/\/ps.w.org\/jumplinks-editorial-workflow\/assets\/icon-256x256.png?rev=3516313","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/jumplinks-editorial-workflow\/assets\/screenshot-1.png?rev=3516313","caption":"Settings screen for review mode, reviewer roles, and supported content types."},{"src":"https:\/\/ps.w.org\/jumplinks-editorial-workflow\/assets\/screenshot-2.png?rev=3516313","caption":"Review panel in the block editor with workflow status and reviewer assignment."},{"src":"https:\/\/ps.w.org\/jumplinks-editorial-workflow\/assets\/screenshot-3.png?rev=3516313","caption":"Review panel in the Classic Editor with workflow controls."},{"src":"https:\/\/ps.w.org\/jumplinks-editorial-workflow\/assets\/screenshot-4.png?rev=3516313","caption":"Review panel in Elementor for editorial collaboration."},{"src":"https:\/\/ps.w.org\/jumplinks-editorial-workflow\/assets\/screenshot-5.png?rev=3516313","caption":"Review page with general comments and threaded replies."},{"src":"https:\/\/ps.w.org\/jumplinks-editorial-workflow\/assets\/screenshot-6.png?rev=3516313","caption":"Inline comments anchored to content on the review page."},{"src":"https:\/\/ps.w.org\/jumplinks-editorial-workflow\/assets\/screenshot-7.png?rev=3516313","caption":"Highlighted content with contextual feedback on the review page."}],"raw_content":"<!--section=description-->\n<p>Flow helps teams review, comment on, and approve content in WordPress before it goes live, without complex setup or heavyweight workflow tools.<\/p>\n\n<p>If your current process depends on long comment threads, scattered docs, or complex workflow setup, Flow gives you a cleaner path from draft to approved.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>The author assigns a reviewer to the draft.<\/li>\n<li>The reviewer opens the review page and leaves inline comments in context.<\/li>\n<li>The reviewer requests changes or approves the content.<\/li>\n<li>The author publishes with confidence once the review is approved.<\/li>\n<\/ol>\n\n<h4>Best for<\/h4>\n\n<ul>\n<li>Content teams that need a clear draft-to-approval path<\/li>\n<li>Agencies and freelance developers showcasing in-progress pages or posts to clients for feedback and signoff<\/li>\n<li>Marketing teams shipping frequent updates across multiple content types<\/li>\n<li>Editorial teams that want structure without heavy workflow configuration<\/li>\n<\/ul>\n\n<h4>Why teams choose Flow<\/h4>\n\n<ul>\n<li><strong>Inline comments in context:<\/strong> Leave feedback exactly where it matters so edits are clearer and faster.<\/li>\n<li><strong>Simple review and approval workflow:<\/strong> Move content through practical statuses such as pending, in review, changes requested, and approved.<\/li>\n<li><strong>Familiar Gutenberg-style review page:<\/strong> Dedicated review UI that feels native to WordPress.<\/li>\n<li><strong>Fast team onboarding:<\/strong> Minimal setup and intuitive UI for writers, editors, and reviewers.<\/li>\n<li><strong>Status change email notifications:<\/strong> Keep everyone aligned with timely workflow updates.<\/li>\n<li><strong>Lightweight by design:<\/strong> Built with native WordPress APIs and WordPress UI libraries.<\/li>\n<\/ul>\n\n<h4>Built for your content stack<\/h4>\n\n<ul>\n<li><strong>Editor support:<\/strong> Works with Gutenberg, Classic Editor, Elementor, and Bricks Builder workflows.<\/li>\n<li><strong>Content type flexibility:<\/strong> Use Flow for posts, pages, products, and custom post types.<\/li>\n<li><strong>WooCommerce friendly:<\/strong> Works smoothly with WooCommerce-based editorial setups.<\/li>\n<\/ul>\n\n<h4>What makes Flow different<\/h4>\n\n<p>Many editorial workflow plugins optimize for maximum configuration. Flow optimizes for publishing momentum.<\/p>\n\n<p>You get a clear approval process and contextual collaboration without overwhelming your team with complexity.<\/p>\n\n<p>If you want an editorial workflow that is modern, focused, and easy to use from day one, Flow is built for you.<\/p>\n\n<h3>Development<\/h3>\n\n<h4>Where is the JavaScript and CSS source?<\/h4>\n\n<p>Human-editable source for the compiled assets in <code>build\/<\/code> lives in the <code>src\/<\/code> directory. Files under <code>build\/<\/code> are generated by webpack; edit <code>src\/<\/code> instead of hand-editing <code>build\/<\/code>.<\/p>\n\n<h4>How do I rebuild the compiled assets?<\/h4>\n\n<p>From the plugin directory, with a supported Node.js release:<\/p>\n\n<ol>\n<li>Run <code>npm install<\/code> or <code>npm ci<\/code> to install dependencies.<\/li>\n<li>Run <code>npm run build<\/code> to regenerate webpack output.<\/li>\n<\/ol>\n\n<h4>Third-party JavaScript<\/h4>\n\n<p>Packages such as <code>@wordpress\/scripts<\/code> and <code>@wordpress\/icons<\/code> are declared in <code>package.json<\/code>. After <code>npm install<\/code>, see each package under <code>node_modules\/<\/code> for license text, or refer to the upstream WordPress repositories.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin loads avatar images from Gravatar (operated by Automattic), which is a third-party service.<\/p>\n\n<ul>\n<li><strong>What is sent:<\/strong> an MD5 hash of the user's email address, generated by WordPress core via <code>get_avatar_url()<\/code>. No raw email address leaves the site.<\/li>\n<li><strong>When:<\/strong> whenever the plugin renders a comment author avatar (review page comment cards, inline comment threads) or a reviewer\/requester avatar (REST responses for the review sidebar and Bricks\/Elementor drawers).<\/li>\n<li><strong>Why:<\/strong> to display each commenter's avatar next to their comment, matching the rest of the WordPress avatar experience.<\/li>\n<li><strong>Service URL:<\/strong> https:\/\/gravatar.com\/<\/li>\n<li><strong>Terms:<\/strong> https:\/\/automattic.com\/terms\/<\/li>\n<li><strong>Privacy:<\/strong> https:\/\/automattic.com\/privacy\/<\/li>\n<\/ul>\n\n<p>This is the same Gravatar integration that ships with WordPress core; the plugin does not contact any other external services.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/jumplinks-editorial-workflow<\/code> directory, or install the plugin through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Go to <strong>Settings &gt; Flow<\/strong> to configure review mode, eligible content types, and reviewer roles.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20does%20the%20review%20workflow%20work%3F\"><h3>How does the review workflow work?<\/h3><\/dt>\n<dd><p>Assign a reviewer, submit for review, collect inline comments, request changes or approve, and then publish when the content is ready.<\/p><\/dd>\n<dt id=\"which%20editors%20are%20supported%3F\"><h3>Which editors are supported?<\/h3><\/dt>\n<dd><p>Flow is designed for Gutenberg, Classic Editor, Elementor, and Bricks Builder publishing workflows.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20elementor%3F\"><h3>Does it work with Elementor?<\/h3><\/dt>\n<dd><p>Yes. Flow supports Elementor-based publishing workflows and review collaboration.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20classic%20editor%3F\"><h3>Does it work with Classic Editor?<\/h3><\/dt>\n<dd><p>Yes. Flow includes support for Classic Editor workflows alongside Gutenberg.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20bricks%20builder%3F\"><h3>Does it work with Bricks Builder?<\/h3><\/dt>\n<dd><p>Yes. Flow adds a Review button to the Bricks toolbar (next to Save) that opens a Bricks-themed review drawer with reviewer assignment, status, and approve \/ request changes actions. When mandatory review is enabled, the Publish button is automatically disabled until the post is approved.<\/p><\/dd>\n<dt id=\"does%20flow%20support%20custom%20content%20types%3F\"><h3>Does Flow support custom content types?<\/h3><\/dt>\n<dd><p>Yes. You can enable the review workflow for posts, pages, products, and custom post types from the settings screen.<\/p><\/dd>\n<dt id=\"does%20flow%20send%20email%20notifications%3F\"><h3>Does Flow send email notifications?<\/h3><\/dt>\n<dd><p>Yes. Flow sends email notifications for key review lifecycle events, helping teams stay aligned on status changes.<\/p><\/dd>\n<dt id=\"is%20flow%20compatible%20with%20woocommerce%3F\"><h3>Is Flow compatible with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Flow is compatible with WooCommerce-powered sites and content workflows.<\/p><\/dd>\n<dt id=\"who%20should%20use%20flow%3F\"><h3>Who should use Flow?<\/h3><\/dt>\n<dd><p>Flow is ideal for content and editorial teams that need a simple review and approval workflow in WordPress without the overhead of enterprise-style configuration. It also works well for freelance developers and agencies who want a structured way to share in-progress work with clients for feedback and approval, without sending screenshots or asking clients to navigate the WordPress admin.<\/p><\/dd>\n<dt id=\"can%20i%20use%20flow%20to%20showcase%20work%20to%20clients%3F\"><h3>Can I use Flow to showcase work to clients?<\/h3><\/dt>\n<dd><p>Yes. Add the client as a user with a reviewer-eligible role, assign them as the reviewer, and send them the review page link. They land on a focused page with the page or post preview, leave inline comments anchored to specific content, and approve or request changes \u2014 without ever needing to learn the WordPress editor.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Improvement: WordPress admin bar shows a \"Review\" shortcut on posts with an active review the current user can access.<\/li>\n<li>Improvement: Review page bar now ships with a \"View\" dropdown.<\/li>\n<li>Improvement: Classic Editor uses autocomplete for reviewer select and better styling.<\/li>\n<li>Fix: Inline comment popover on mobile now keeps a visible margin from the screen edges instead of touching them.<\/li>\n<li>Fix: Open reviews with no primary reviewer no longer treat anonymous viewers as eligible reviewers.<\/li>\n<li>Fix: Every bundled <code>*.l10n.php<\/code> translation file now declares a direct-access guard, resolving a Plugin Checker warning.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: Review page is now usable on mobile \u2014 selection-based commenting, approve, and request-changes work on all devices.<\/li>\n<li>New: Open Review mode lets any logged-in user with the link comment on a post under review, not just assigned reviewers. Available in Gutenberg, Classic Editor, Elementor, and Bricks; surfaces as a virtual status in the post-listing column, listing filter, and dashboard widget.<\/li>\n<li>Improvement: Redesigned Elementor review section.<\/li>\n<li>Improvement: Click-to-comment overlay skips emojis, reCAPTCHA iframes, and hidden\/decorative media.<\/li>\n<li>Improvement: Long post titles and comment author names ellipsize so they no longer overlap in the review page chrome.<\/li>\n<li>Fix: Inline highlight no longer reflows paragraph text when a comment is added.<\/li>\n<li>Fix: \"Highlight text\u2026\" hint stays put after the first comment is added.<\/li>\n<li>Fix: Mandatory review no longer blocks Update on already-published posts.<\/li>\n<li>Fix: Removed the duplicate \"Send for Review\" button above the Gutenberg editor.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Refactor: Extensive code cleanup, security improvements, guidelines fixes.<\/li>\n<li>Improvement: Add AI generated translations for all languages.<\/li>\n<li>Fix: Some background-image cases preventing commenting on text.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>Improvement: Review iframe now renders content at the user's full browser viewport regardless of sidebar state \u2014 visually scaled to fit beside the sidebar.<\/li>\n<li>Fix: Bricks no longer get the snapshot post title baked into their CSS \u2014 <code>font-family: \"&lt;post title&gt;\"<\/code> instead of the real font name.<\/li>\n<li>Fix: Images wrapped in <code>&lt;a&gt;<\/code> (gallery markup) no longer collapse to their intrinsic size.<\/li>\n<li>Fix: Dashboard \"Flow Reviews\" widget no longer counts reviews whose underlying post was deleted.<\/li>\n<li>Fix: When a post is permanently deleted, its review and review-comment rows are cascade-deleted. Trashed posts are unaffected.<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Improvement: Inline comment popover is now mounted into a Shadow DOM root, isolating it from theme \/ page-builder CSS so button styles, color resets, and similar rules can't bleed in.<\/li>\n<li>Fix: Gallery and other <code>&lt;a&gt;&lt;img&gt;&lt;\/a&gt;<\/code> markup now opens the comment popover when clicked instead of being swallowed by the review-page link guard.<\/li>\n<li>Fix: Inline <code>onclick=\"window.open( '\u2026', '_self' )\"<\/code> handlers (common in galleries) no longer navigate the review iframe out of the chrome \u2014 same <code>_blank<\/code> bypass as <code>target=\"_blank\"<\/code> anchors.<\/li>\n<li>Fix: WordPress admin-bar \"bump\" CSS no longer reserves a 32px gap at the top of the review iframe when the admin bar is hidden.<\/li>\n<li>Fix: Theme front-end scripts and styles are dequeued on the parent review shell, eliminating noisy initializer errors (Google Maps, sliders, etc.) that expected the live page DOM.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Fix: Inline \"Add Comment\" popover sometimes failed to open the editor on production sites in full-page review mode \u2014 text-selection commenting now works reliably across page-builder layouts and themes that don't expose <code>.entry-content<\/code> \/ <code>.wp-block-post-content<\/code>.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>New: Dedicated \"Reviewer\" role added on activation. Carries the minimum capabilities to log in and act on the review page.<\/li>\n<li>New: \"Flow Reviews\" dashboard widget showing posts you're a participant in.<\/li>\n<li>New: \"Review\" column and filters on post \/ page listings.<\/li>\n<li>Improvement: Reviewer avatars (Gravatar) shown in comment cards and the inline threads.<\/li>\n<li>Improvement: Review iframe now renders the snapshot revision through the full singular template (header \/ footer \/ sidebar) \u2014 matching the front-end exactly.<\/li>\n<li>Fix: Quick Edit and Bulk Edit now respect Mandatory review mode.<\/li>\n<li>Fix: All public, REST-enabled, editor-supporting custom post types (JetEngine, ACF, CPT UI, etc.) are now auto-discovered in the Content Types settings form.<\/li>\n<li>Fix: Resolved comment threads paint green even when the underlying inline anchor is flagged outdated.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Fix: Selecting text across multiple blocks (e.g. a heading and a paragraph) and adding a comment no longer breaks the layout or drops the highlight \u2014 each block now gets its own highlight mark sharing the comment id.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>New: Click-to-comment overlay on images, videos, and embed iframes (YouTube, Vimeo, etc.) on the review page. Clicking media opens the comment editor directly; embed videos no longer play on click.<\/li>\n<li>New: Highlight ring shown on commented media (images, videos, embeds) so reviewers can see at a glance which items already have feedback. Uniform look across wrap, cover, and embed layouts.<\/li>\n<li>New: Live Preview blueprint at <code>assets\/blueprints\/blueprint.json<\/code> so the WordPress.org plugin page can spin up a one-click demo of the review experience (logged in as a reviewer with sample image\/video content to comment on).<\/li>\n<li>Improvement: Comment thread popover flips above the highlighted item when there's no room below \u2014 keeps it inside the viewport for media at the page bottom.<\/li>\n<li>Improvement: Add Comment editor opens directly when clicking media (the in-between pill is redundant since the overlay already shows a \"Click to comment\" hint on hover).<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Fix: Restore proper styling on the inline \"Add Comment\" button.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>New: Subtle \"rate this plugin\" link on the Plugins screen and a small review prompt on the Flow settings page \u2014 never a popup, never a nag.<\/li>\n<li>Fix: Review template now wins over themes that hijack <code>template_include<\/code> (e.g. Kallyas builder, other site-builder themes), so the dedicated review page renders correctly regardless of the active theme.<\/li>\n<li>Fix: Inline comment popover buttons no longer inherit theme-injected button styling (border, color, padding, etc.) on themes that style bare <code>button<\/code> \/ <code>[type=button]<\/code> selectors.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Bricks Builder integration with a Review toolbar button, themed review drawer, and automatic Publish-button lock when mandatory review isn't approved.<\/li>\n<li>New: Modal-based first-run setup wizard with three guided steps (review mode, content types, reviewer roles) and a \"Run setup again\" affordance on the settings page.<\/li>\n<li>New: Translation template (.pot) shipped under <code>languages\/<\/code>, plus <code>Domain Path<\/code> header, so translate.wordpress.org community translations are picked up automatically.<\/li>\n<li>Improvement: Reviewer can be re-assigned after a post is approved (creates a new review iteration so teams can request another round of review).<\/li>\n<li>Improvement: Empty content-type and reviewer-role selections are now honored instead of silently reverting to defaults.<\/li>\n<li>Fix: PHP 7.4 compatibility \u2014 removed union return type declarations from REST endpoints that prevented the plugin from loading on PHP 7.4.<\/li>\n<li>Fix: WordPress 6.5.x compatibility \u2014 added a polyfill for the <code>react-jsx-runtime<\/code> script handle that core only registers from 6.6 onwards, restoring the review page chrome and editor sidebars on older WP versions.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Editorial workflow and content approval plugin with inline comments and a familiar WordPress style review experience.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/300646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=300646"}],"author":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jumplinks"}],"wp:attachment":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=300646"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=300646"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=300646"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=300646"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=300646"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=300646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}