{"id":268596,"date":"2025-12-28T08:55:58","date_gmt":"2025-12-28T08:55:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/launchmind-blog\/"},"modified":"2026-08-17T06:44:20","modified_gmt":"2026-08-17T06:44:20","slug":"launchmind-blog","status":"publish","type":"plugin","link":"https:\/\/bo.wordpress.org\/plugins\/launchmind-blog\/","author":23422788,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"5.13.0","stable_tag":"5.13.0","tested":"6.9.7","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Launchmind Blog","header_author":"Launchmind.io","header_description":"Display AI-powered Launchmind blog content on your WordPress site.","assets_banners_color":"1c1c1e","last_updated":"2026-08-17 06:44:20","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/launchmind.io","rating":5,"author_block_rating":0,"active_installs":0,"downloads":2181,"num_ratings":3,"support_threads":1,"support_threads_resolved":1,"author_block_count":0,"sections":["installation","faq","changelog","description"],"tags":{"2.0.1":{"tag":"2.0.1","author":"launchmind","date":"2025-12-28 09:12:46"},"2.0.3":{"tag":"2.0.3","author":"launchmind","date":"2026-01-04 13:32:31"},"2.0.4":{"tag":"2.0.4","author":"launchmind","date":"2026-01-04 13:41:37"},"2.0.5":{"tag":"2.0.5","author":"launchmind","date":"2026-01-04 13:47:21"},"2.10.0":{"tag":"2.10.0","author":"launchmind","date":"2026-04-02 11:12:55"},"2.10.1":{"tag":"2.10.1","author":"launchmind","date":"2026-04-02 11:38:33"},"2.11.0":{"tag":"2.11.0","author":"launchmind","date":"2026-04-07 08:45:14"},"2.2.0":{"tag":"2.2.0","author":"launchmind","date":"2026-01-04 14:46:39"},"2.2.1":{"tag":"2.2.1","author":"launchmind","date":"2026-01-04 14:50:24"},"2.2.2":{"tag":"2.2.2","author":"launchmind","date":"2026-01-04 15:05:39"},"2.2.4":{"tag":"2.2.4","author":"launchmind","date":"2026-01-04 17:38:56"},"2.2.5":{"tag":"2.2.5","author":"launchmind","date":"2026-01-04 17:39:42"},"2.2.6":{"tag":"2.2.6","author":"launchmind","date":"2026-01-05 09:40:25"},"2.2.7":{"tag":"2.2.7","author":"launchmind","date":"2026-01-05 10:04:01"},"2.2.8":{"tag":"2.2.8","author":"launchmind","date":"2026-01-05 10:25:17"},"2.3.0":{"tag":"2.3.0","author":"launchmind","date":"2026-01-05 10:54:01"},"2.3.1":{"tag":"2.3.1","author":"launchmind","date":"2026-01-05 11:48:55"},"2.4.0":{"tag":"2.4.0","author":"launchmind","date":"2026-01-06 08:44:51"},"2.4.1":{"tag":"2.4.1","author":"launchmind","date":"2026-01-06 10:28:11"},"2.4.2":{"tag":"2.4.2","author":"launchmind","date":"2026-01-06 10:38:44"},"2.4.3":{"tag":"2.4.3","author":"launchmind","date":"2026-01-06 10:38:44"},"2.4.4":{"tag":"2.4.4","author":"launchmind","date":"2026-01-06 10:52:30"},"2.4.5":{"tag":"2.4.5","author":"launchmind","date":"2026-01-06 11:48:52"},"2.4.6":{"tag":"2.4.6","author":"launchmind","date":"2026-01-06 12:33:46"},"2.4.7":{"tag":"2.4.7","author":"launchmind","date":"2026-01-06 12:55:26"},"2.4.8":{"tag":"2.4.8","author":"launchmind","date":"2026-01-06 13:12:38"},"2.5.0":{"tag":"2.5.0","author":"launchmind","date":"2026-01-27 10:49:42"},"2.6.0":{"tag":"2.6.0","author":"launchmind","date":"2026-01-27 13:57:35"},"2.7.0":{"tag":"2.7.0","author":"launchmind","date":"2026-03-24 12:16:36"},"2.8.0":{"tag":"2.8.0","author":"launchmind","date":"2026-03-25 13:45:48"},"2.9.0":{"tag":"2.9.0","author":"launchmind","date":"2026-03-25 13:57:02"},"4.0.0":{"tag":"4.0.0","author":"launchmind","date":"2026-04-08 15:24:45"},"4.0.1":{"tag":"4.0.1","author":"launchmind","date":"2026-04-08 17:11:46"},"4.0.2":{"tag":"4.0.2","author":"launchmind","date":"2026-04-09 06:13:13"},"4.1.0":{"tag":"4.1.0","author":"launchmind","date":"2026-04-14 14:08:03"},"4.10.0":{"tag":"4.10.0","author":"launchmind","date":"2026-04-21 11:54:48"},"4.10.1":{"tag":"4.10.1","author":"launchmind","date":"2026-04-21 12:11:11"},"4.10.2":{"tag":"4.10.2","author":"launchmind","date":"2026-04-21 12:21:53"},"4.11.0":{"tag":"4.11.0","author":"launchmind","date":"2026-04-21 12:39:55"},"4.11.1":{"tag":"4.11.1","author":"launchmind","date":"2026-04-21 12:49:44"},"4.11.2":{"tag":"4.11.2","author":"launchmind","date":"2026-04-21 12:56:10"},"4.11.3":{"tag":"4.11.3","author":"launchmind","date":"2026-04-21 13:11:16"},"4.11.4":{"tag":"4.11.4","author":"launchmind","date":"2026-04-21 13:31:46"},"4.11.5":{"tag":"4.11.5","author":"launchmind","date":"2026-04-21 13:41:36"},"4.2.0":{"tag":"4.2.0","author":"launchmind","date":"2026-04-15 07:33:22"},"4.2.1":{"tag":"4.2.1","author":"launchmind","date":"2026-04-15 12:58:21"},"4.3.0":{"tag":"4.3.0","author":"launchmind","date":"2026-04-17 05:59:04"},"4.4.0":{"tag":"4.4.0","author":"launchmind","date":"2026-04-17 06:12:35"},"4.5.0":{"tag":"4.5.0","author":"launchmind","date":"2026-04-21 09:57:18"},"4.6.0":{"tag":"4.6.0","author":"launchmind","date":"2026-04-21 10:34:17"},"4.7.0":{"tag":"4.7.0","author":"launchmind","date":"2026-04-21 11:05:29"},"4.8.0":{"tag":"4.8.0","author":"launchmind","date":"2026-04-21 11:13:55"},"4.9.0":{"tag":"4.9.0","author":"launchmind","date":"2026-04-21 11:31:37"},"5.0.0":{"tag":"5.0.0","author":"launchmind","date":"2026-04-22 06:24:50"},"5.0.1":{"tag":"5.0.1","author":"launchmind","date":"2026-04-29 09:14:21"},"5.1.0":{"tag":"5.1.0","author":"launchmind","date":"2026-04-29 10:18:57"},"5.1.1":{"tag":"5.1.1","author":"launchmind","date":"2026-04-29 11:31:52"},"5.1.10":{"tag":"5.1.10","author":"launchmind","date":"2026-04-30 18:32:56"},"5.1.11":{"tag":"5.1.11","author":"launchmind","date":"2026-05-01 06:15:08"},"5.1.2":{"tag":"5.1.2","author":"launchmind","date":"2026-04-30 08:14:49"},"5.1.3":{"tag":"5.1.3","author":"launchmind","date":"2026-04-30 15:27:26"},"5.1.4":{"tag":"5.1.4","author":"launchmind","date":"2026-04-30 16:37:09"},"5.1.5":{"tag":"5.1.5","author":"launchmind","date":"2026-04-30 17:05:51"},"5.1.7":{"tag":"5.1.7","author":"launchmind","date":"2026-04-30 17:30:08"},"5.1.8":{"tag":"5.1.8","author":"launchmind","date":"2026-04-30 17:57:52"},"5.1.9":{"tag":"5.1.9","author":"launchmind","date":"2026-04-30 18:27:55"},"5.10.0":{"tag":"5.10.0","author":"launchmind","date":"2026-08-11 12:44:10"},"5.11.0":{"tag":"5.11.0","author":"launchmind","date":"2026-08-11 13:03:46"},"5.11.1":{"tag":"5.11.1","author":"launchmind","date":"2026-08-11 13:15:06"},"5.11.2":{"tag":"5.11.2","author":"launchmind","date":"2026-08-11 13:21:29"},"5.11.4":{"tag":"5.11.4","author":"launchmind","date":"2026-08-11 14:20:02"},"5.11.5":{"tag":"5.11.5","author":"launchmind","date":"2026-08-12 05:47:40"},"5.11.6":{"tag":"5.11.6","author":"launchmind","date":"2026-08-12 05:55:46"},"5.11.7":{"tag":"5.11.7","author":"launchmind","date":"2026-08-12 06:04:45"},"5.11.9":{"tag":"5.11.9","author":"launchmind","date":"2026-08-12 06:28:05"},"5.12.1":{"tag":"5.12.1","author":"launchmind","date":"2026-08-12 09:57:03"},"5.13.0":{"tag":"5.13.0","author":"launchmind","date":"2026-08-17 06:44:20"},"5.2.0":{"tag":"5.2.0","author":"launchmind","date":"2026-05-01 16:51:38"},"5.3.0":{"tag":"5.3.0","author":"launchmind","date":"2026-05-07 13:25:19"},"5.3.1":{"tag":"5.3.1","author":"launchmind","date":"2026-05-08 05:42:14"},"5.3.2":{"tag":"5.3.2","author":"launchmind","date":"2026-05-08 06:13:27"},"5.3.3":{"tag":"5.3.3","author":"launchmind","date":"2026-05-08 07:10:26"},"5.3.4":{"tag":"5.3.4","author":"launchmind","date":"2026-05-08 07:28:25"},"5.3.5":{"tag":"5.3.5","author":"launchmind","date":"2026-05-12 07:13:05"},"5.3.6":{"tag":"5.3.6","author":"launchmind","date":"2026-05-12 07:30:52"},"5.7.0":{"tag":"5.7.0","author":"launchmind","date":"2026-05-12 07:50:47"},"5.7.1":{"tag":"5.7.1","author":"launchmind","date":"2026-05-12 08:05:05"},"5.8.0":{"tag":"5.8.0","author":"launchmind","date":"2026-07-27 07:11:04"},"5.9.0":{"tag":"5.9.0","author":"launchmind","date":"2026-08-11 08:38:35"},"5.9.1":{"tag":"5.9.1","author":"launchmind","date":"2026-08-11 10:20:01"},"5.9.2":{"tag":"5.9.2","author":"launchmind","date":"2026-08-11 10:41:15"},"5.9.3":{"tag":"5.9.3","author":"launchmind","date":"2026-08-11 10:52:22"},"5.9.4":{"tag":"5.9.4","author":"launchmind","date":"2026-08-11 11:01:28"},"5.9.6":{"tag":"5.9.6","author":"launchmind","date":"2026-08-11 12:26:10"}},"upgrade_notice":{"2.0.0":"<p>Major update with new Gutenberg blocks and dashboard. Please verify your API key is still configured after updating.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":3},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3497313,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3497313,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3497445,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3497445,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"launchmind\/blog-list":{"name":"launchmind\/blog-list","title":"Launchmind Blog"},"launchmind\/blog-post":{"name":"launchmind\/blog-post","title":"Launchmind Single Post"}},"tagged_versions":["2.0.1","2.0.3","2.0.4","2.0.5","2.10.0","2.10.1","2.11.0","2.2.0","2.2.1","2.2.2","2.2.4","2.2.5","2.2.6","2.2.7","2.2.8","2.3.0","2.3.1","2.4.0","2.4.1","2.4.2","2.4.3","2.4.4","2.4.5","2.4.6","2.4.7","2.4.8","2.5.0","2.6.0","2.7.0","2.8.0","2.9.0","4.0.0","4.0.1","4.0.2","4.1.0","4.10.0","4.10.1","4.10.2","4.11.0","4.11.1","4.11.2","4.11.3","4.11.4","4.11.5","4.2.0","4.2.1","4.3.0","4.4.0","4.5.0","4.6.0","4.7.0","4.8.0","4.9.0","5.0.0","5.0.1","5.1.0","5.1.1","5.1.10","5.1.11","5.1.2","5.1.3","5.1.4","5.1.5","5.1.7","5.1.8","5.1.9","5.10.0","5.11.0","5.11.1","5.11.2","5.11.4","5.11.5","5.11.6","5.11.7","5.11.9","5.12.1","5.13.0","5.2.0","5.3.0","5.3.1","5.3.2","5.3.3","5.3.4","5.3.5","5.3.6","5.7.0","5.7.1","5.8.0","5.9.0","5.9.1","5.9.2","5.9.3","5.9.4","5.9.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3497443,"resolution":"1","location":"assets","locale":"","width":1029,"height":1200},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3497443,"resolution":"2","location":"assets","locale":"","width":1195,"height":1200},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3497445,"resolution":"3","location":"assets","locale":"","width":1200,"height":755}},"screenshots":{"1":"Modern admin dashboard with article overview","2":"Gutenberg blog list block in the editor","3":"Single post block displaying article content"}},"plugin_section":[],"plugin_tags":[2353,5936,323,529,186],"plugin_category":[55],"plugin_contributors":[252918],"plugin_business_model":[],"class_list":["post-268596","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-articles","plugin_tags-blog","plugin_tags-content","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-launchmind","plugin_committers-launchmind"],"banners":{"banner":"https:\/\/ps.w.org\/launchmind-blog\/assets\/banner-772x250.png?rev=3497445","banner_2x":"https:\/\/ps.w.org\/launchmind-blog\/assets\/banner-1544x500.png?rev=3497445","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/launchmind-blog\/assets\/icon-128x128.png?rev=3497313","icon_2x":"https:\/\/ps.w.org\/launchmind-blog\/assets\/icon-256x256.png?rev=3497313","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/launchmind-blog\/assets\/screenshot-1.png?rev=3497443","caption":"Modern admin dashboard with article overview"},{"src":"https:\/\/ps.w.org\/launchmind-blog\/assets\/screenshot-2.png?rev=3497443","caption":"Gutenberg blog list block in the editor"},{"src":"https:\/\/ps.w.org\/launchmind-blog\/assets\/screenshot-3.png?rev=3497445","caption":"Single post block displaying article content"}],"raw_content":"<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/launchmind-blog<\/code>.<\/li>\n<li>Activate the plugin through the Plugins menu in WordPress.<\/li>\n<li>Navigate to the Launchmind menu item (left sidebar) and enter your API key.<\/li>\n<li>Add a Gutenberg block (<code>Launchmind Blog<\/code>) or use the shortcode <code>[launchmind_blog]<\/code> on any page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20find%20my%20api%20key%3F\"><h3>Where do I find my API key?<\/h3><\/dt>\n<dd><p>Log in to your <a href=\"https:\/\/launchmind.io\/backlinks\/dashboard\">Launchmind Dashboard<\/a> and navigate to the \"Webshop Plugins\" tab. Your API key is displayed in the green box.<\/p><\/dd>\n<dt id=\"can%20i%20use%20shortcodes%20instead%20of%20gutenberg%20blocks%3F\"><h3>Can I use shortcodes instead of Gutenberg blocks?<\/h3><\/dt>\n<dd><p>Yes! Use <code>[launchmind_blog limit=\"6\" columns=\"3\"]<\/code> for a blog list or <code>[launchmind_post slug=\"your-post-slug\"]<\/code> for a single post.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20track%20my%20visitors%3F\"><h3>Does this plugin track my visitors?<\/h3><\/dt>\n<dd><p>No. This plugin only communicates with Launchmind servers to fetch your blog content. No personal data from your site visitors is collected or transmitted.<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%20to%20launchmind%3F\"><h3>What data is sent to Launchmind?<\/h3><\/dt>\n<dd><p>Only your API key and content requests (such as post slugs and language preferences) are sent to authenticate and retrieve your blog posts. No visitor data is transmitted.<\/p><\/dd>\n<dt id=\"is%20the%20%22powered%20by%20launchmind%22%20branding%20required%3F\"><h3>Is the \"Powered by Launchmind\" branding required?<\/h3><\/dt>\n<dd><p>No. The branding is disabled by default. You can optionally enable it in the block settings or shortcode attributes if you wish to display it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>5.13.0<\/h4>\n\n<ul>\n<li><strong>Changes now arrive within seconds instead of within an hour.<\/strong> The plugin used to check for new articles once an hour, so a freshly approved article could sit and wait, and an article you took offline could stay on your site for another hour. Launchmind now notifies your site the moment something is published, updated or taken offline, and the site fetches it straight away. The hourly run stays in place as the safety net.<\/li>\n<li><strong>Your blog page is set up properly on install.<\/strong> The plugin created a bare \/blog page with nothing else on it: no SEO title, no meta description, no menu item, and nothing at all in Sync mode. It now sets the page up completely, in the language of your site, adds it to your main menu if there is no link to it yet, and fills in the SEO fields of Yoast, Rank Math, SEOPress or The SEO Framework. Existing pages are left exactly as they are.<\/li>\n<li><strong>Multilingual sites get a blog page per language.<\/strong> On Polylang and WPML the plugin creates one page for each language that your site speaks and that Launchmind delivers, and links them together so the language switcher works.<\/li>\n<li><strong>Sync is the new default for fresh installs.<\/strong> Real WordPress posts in your own database, images in your own media library, and content that keeps working even without a Launchmind connection. That last argument for Live mode, being instantly up to date, is gone now that changes are pushed through. Sites that already made a choice keep it.<\/li>\n<li><strong>The article count no longer stops at 50.<\/strong> The dashboard counted how many articles it had fetched rather than how many there are, so every customer with a larger library saw the same number. Paging through the list works properly now too.<\/li>\n<li><strong>A tidier admin screen.<\/strong> The Analytics tab is gone: it repeated the counters already at the top and had no figures of its own. Settings has moved to its own menu item next to Dashboard and Articles, so what you look at daily and what you set once are no longer mixed together.<\/li>\n<\/ul>\n\n<h4>5.12.1<\/h4>\n\n<ul>\n<li><strong>The readability dot is filled in as well now.<\/strong> 5.12.0 deliberately left it grey, because the only figure we had was a raw reading-ease score that measures something different from what Yoast shows: it penalises long Dutch compound words while ignoring what actually makes a text readable. Launchmind now runs the same set of checks Yoast does (sentence length, paragraph length, subheadings, sentence beginnings, transition words, passive voice) and reports the share that pass, which is directly comparable to the figure in your editor.<\/li>\n<\/ul>\n\n<h4>5.12.0<\/h4>\n\n<ul>\n<li><strong>Tags are now the article's own keyword, not the whole list.<\/strong> Every article carried the same ten tags, because the plugin received the keyword set of the entire cluster rather than the keyword this particular article targets. Articles now get their own keyword, which is what a tag is meant to be.<\/li>\n<li><strong>Q&amp;A articles get a category.<\/strong> They come from an interview and belong to no content pillar, so they were left without any category at all. They now get their own \"Q&amp;A\" category.<\/li>\n<li><strong>The SEO dot in the article list is no longer grey.<\/strong> Yoast only runs its analysis inside the editor, and a synced article never passes through it. The plugin now fills in the score Launchmind already determined. Note this is Launchmind's assessment shown in Yoast's colours; opening the article in the editor makes Yoast calculate its own. The readability dot is deliberately left alone, because we do not measure that reliably enough to colour it.<\/li>\n<\/ul>\n\n<h4>5.11.9<\/h4>\n\n<ul>\n<li><strong>The sharing image is now exactly 1200x630 on every article.<\/strong> That is the size Facebook, LinkedIn, X, WhatsApp and Slack all expect. Previously the plugin could only crop down, so an article whose cover was smaller ended up below the recommended width and networks fell back to a small card. The image is cropped from the centre and saved as a JPEG, which also keeps heavy PNG covers from bloating the preview.<\/li>\n<\/ul>\n\n<h4>5.11.8<\/h4>\n\n<ul>\n<li><strong>Fix: the plugin now sets the sharing image tags itself on Yoast sites.<\/strong> Three earlier attempts to get Yoast to pick the prepared image each failed at a different point in its pipeline, most recently by quietly swapping the address back to the original file. Rather than keep guessing at its internals, the plugin now removes only Yoast's two image tags and writes them itself. Everything else Yoast does, titles, descriptions, canonicals and schema, is untouched.<\/li>\n<\/ul>\n\n<h4>5.11.7<\/h4>\n\n<ul>\n<li><strong>Fix: the sharing image is now its own image, so nothing can override it.<\/strong> Cropping inside the original image was not enough: Yoast takes the URL, looks up the image it belongs to, and then falls back to the full-size original. The page ended up stating the cropped size above the uncropped file. The prepared sharing image is now stored as an image in its own right, so its full size <em>is<\/em> the crop and no SEO plugin can reach past it. This also makes it work identically on Rank Math, SEOPress, All in One SEO and on sites with no SEO plugin at all.<\/li>\n<li>Added the <code>name=\"image\"<\/code> tag that LinkedIn asks for in its own Post Inspector, alongside the standard tags.<\/li>\n<\/ul>\n\n<h4>5.11.6<\/h4>\n\n<ul>\n<li><strong>Fix: the sharing image really is applied now.<\/strong> The code added in 5.11.5 ran but changed nothing, because of a faulty check on our side. Verified on a live site: the prepared image was ready and the page still pointed at the original. No re-sync is needed after this update, the change takes effect on the next page view.<\/li>\n<\/ul>\n\n<h4>5.11.5<\/h4>\n\n<ul>\n<li><strong>Fix: the sharing image now actually reaches Facebook and LinkedIn.<\/strong> 5.11.4 prepared a correctly cropped sharing image but never got it onto the page, because recent versions of Yoast decide the sharing image in a way the previous approach could not reach. The plugin now writes it into the SEO plugin's own field during the sync, where it is also visible to you under the article, and enforces it on the page itself.<\/li>\n<li><strong>Works without an SEO plugin, and with the other ones.<\/strong> Yoast, Rank Math, SEOPress and The SEO Framework each get the image in their own field. Sites running no SEO plugin at all, and sites on All in One SEO, get the tag straight from this plugin instead. Whichever setup you are on, the sharing image is the prepared one and its stated size matches the file.<\/li>\n<\/ul>\n\n<h4>5.11.4<\/h4>\n\n<ul>\n<li><strong>Fix: articles now have a real sharing image.<\/strong> Until now the plugin handed the article's cover image to Facebook and LinkedIn exactly as it was. A cover is not a sharing image: one article's cover was a tall 1024x1536 portrait, which does not fit the wide card those networks show, and another was a 2.9 MB image whose real size disagreed with what the page claimed. Both are reasons a network quietly falls back to no image at all. The plugin now prepares a proper 1200x630 sharing image during the sync and hands that over instead, with its true dimensions. Existing articles get one on the next sync, without needing an edit.<\/li>\n<\/ul>\n\n<h4>5.11.3<\/h4>\n\n<ul>\n<li><strong>Fix: link previews on Facebook, LinkedIn and WhatsApp.<\/strong> In sync mode the article is a real WordPress post, so your SEO plugin already publishes a preview image and the plugin published a second one on top of it. The two disagreed about the image size, and scrapers that trust the first one reported no image at all. The plugin now leaves the preview image to your SEO plugin on synced posts.<\/li>\n<li><strong>Fix: the preview image size is no longer guessed.<\/strong> The plugin declared every preview image as 1200x630 pixels without ever measuring it. That was wrong for practically every article, which is what made social networks re-fetch or skip the image. The real size is now read from the media library, and when it cannot be determined the plugin says nothing and lets the network measure the file itself.<\/li>\n<li><strong>Fix: articles are filed under their real author.<\/strong> Synced articles were owned by the administrator account, so the REST API, oEmbed and the articles list in wp-admin all showed \"admin\" while the article page itself showed the correct byline. Each writer now gets their own author record. These records have no role and no usable password, so they cannot sign in; they exist only so WordPress knows who wrote the article. To keep everything on the administrator account instead, add <code>add_filter('launchmind_create_author_users', '__return_false');<\/code> to your theme.<\/li>\n<\/ul>\n\n<h4>5.11.2<\/h4>\n\n<ul>\n<li><strong>Fix: existing articles now get their category and SEO fields too.<\/strong> The pillar category and the SEO plugin fields introduced in 5.11.0 were only written when an article's content had changed, so articles already on your site kept their empty category and empty focus keyphrase and the feature looked broken. Those fields are now kept current on every run, whether the text changed or not.<\/li>\n<\/ul>\n\n<h4>5.11.1<\/h4>\n\n<ul>\n<li><strong>Fix: clicking Launchmind opens the dashboard again.<\/strong> Adding the articles list under the Launchmind menu in 5.11.0 pushed it to the top, and WordPress sends a click on a parent menu to whatever sits first. That made the settings unreachable. Dashboard is back on top, with Articles below it.<\/li>\n<\/ul>\n\n<h4>5.11.0<\/h4>\n\n<ul>\n<li><strong>Fix: you can now actually edit a synced article.<\/strong> Opening one in the WordPress editor was blocked by a permission setting left over from when these articles were not real posts yet. Even an administrator could not edit them. They behave like any other post now.<\/li>\n<li><strong>New: articles are filed under their content pillar as a category.<\/strong> Your articles are already grouped into topical clusters on the Launchmind side, but that grouping never reached WordPress, so the category column sat empty. Each article now joins the category for its pillar, which gives you real archive pages and breadcrumbs. A category you assigned yourself is never removed.<\/li>\n<li><strong>New: your SEO plugin's fields are filled in.<\/strong> The focus keyphrase, meta description and SEO title are written to Yoast and Rank Math from what we already know, so you stop seeing a red dot on every article for a field that was simply empty. Anything you filled in by hand is left alone.<\/li>\n<li><strong>Keyword tag archives are kept out of search results.<\/strong> The tags on your articles are search terms rather than a real taxonomy, and each article carries most of the same ones, so those archive pages end up nearly identical and compete with your actual articles. Tag archives that contain only Launchmind articles are now marked noindex (links are still followed). Tags you also use on your own posts are untouched, and category archives stay indexable.<\/li>\n<\/ul>\n\n<h4>5.10.0<\/h4>\n\n<ul>\n<li><strong>In Sync mode your blog overview now comes from your own database too.<\/strong> Until now the listing was fetched from Launchmind on every page load, even in Sync mode. That meant the overview could show articles that had not been imported yet (clicking one gave a 404), the links carried a language parameter that no longer did anything, and the overview stopped working if the connection to Launchmind ever went away. Now the listing and the articles come from the same place: yours. That also means your blog overview joins WordPress search, categories and theme loops, which it could not before.<\/li>\n<li><strong>New: an Articles list in the admin.<\/strong> In Sync mode your imported articles now appear under Launchmind as a normal WordPress list, with filters, quick edit and bulk actions. So you can set one or a hundred of them to draft whenever you want. The sync respects that: a post you set to draft yourself is flagged and never republished.<\/li>\n<li><strong>Safety rail on reconciliation.<\/strong> The sync drafts articles that disappeared on the platform. It will now refuse to do that when a run reports zero articles while your site holds many, because \"I saw nothing\" is never a good enough reason to unpublish a whole blog.<\/li>\n<li>Trade-off worth knowing: a brand new article appears in the listing once the hourly sync has picked it up, rather than instantly.<\/li>\n<li><strong>Fix: Q&amp;A articles are recognised again in Sync mode<\/strong>, so \"show only Q&amp;A\" and \"hide Q&amp;A from the main listing\" work as they should.<\/li>\n<li><strong>Fix: an article whose FAQ or summary changed now re-syncs.<\/strong> Those fields were not part of the change check, so an edit that touched only them was skipped and the page kept showing the old answer in its structured data.<\/li>\n<\/ul>\n\n<h4>5.9.6<\/h4>\n\n<ul>\n<li><strong>Fix: Sync mode articles now get our reading styles.<\/strong> Article typography (heading sizes, line height, spacing around paragraphs and lists) is applied through a wrapper that Live mode added but Sync mode did not, so synced articles fell back to whatever heading sizes the theme uses. On builder themes that meant oversized headings pulling the article apart. Same reading experience in both modes now.<\/li>\n<li><strong>The Sync list is paginated at 10 articles per page<\/strong>, so the screen stays readable once you have a hundred of them, and the counter shows your real total instead of the number on screen.<\/li>\n<\/ul>\n\n<h4>5.9.5<\/h4>\n\n<ul>\n<li><strong>Fix: hourly Sync updates were failing every time.<\/strong> The timestamp Sync sends to ask \"what changed since last time\" contained a character that a web address reads differently, so the platform rejected every incremental run with \"Invalid updated_since timestamp\" and the sync stalled after three attempts. Only full runs got through. Fixed on both sides, so existing installs are already working again before they update.<\/li>\n<\/ul>\n\n<h4>5.9.4<\/h4>\n\n<ul>\n<li><strong>Accent colours now pick up Elementor themes too.<\/strong> Our accents look for your theme's primary colour, but the list of places we looked did not include Elementor, which is one of the most common builders there is. On those sites the accents fell back to plain text colour instead of your brand colour. Added, along with a couple of other common theme conventions.<\/li>\n<\/ul>\n\n<h4>5.9.3<\/h4>\n\n<ul>\n<li><strong>Translations now use their own proper URL.<\/strong> 5.9.2 gave every translation the Dutch slug with a language code appended. Launchmind already writes a real slug per language, so a German article now lives at its German address instead of a Dutch one with \"-de\" stuck on the end. Better to read, and better to rank. When no localised slug exists the language suffix is still used as a fallback.<\/li>\n<\/ul>\n\n<h4>5.9.2<\/h4>\n\n<ul>\n<li><strong>Sync mode now keeps all your languages.<\/strong> Until now Sync stored one post per article, in your site language only, and a <code>?lang=<\/code> link quietly served the site language instead. Articles that exist in several languages are now stored as a post per language: your site language keeps its current address (<code>\/blog\/my-article\/<\/code>) and every other language gets its own (<code>\/blog\/my-article-en\/<\/code>). No existing URL moves, so nothing you already rank for is affected.<\/li>\n<li><strong>Old <code>?lang=<\/code> links redirect<\/strong> to the right language page instead of silently showing the wrong one, so links you shared earlier keep working.<\/li>\n<li><strong>hreflang points at the real pages<\/strong> in Sync mode, which is what tells Google these are translations of each other rather than duplicates.<\/li>\n<li><strong>From the Sync list you can now reach both sides of an article<\/strong>: the title opens the WordPress editor so you can change anything you want, and the address below it opens the live page in a new tab. Translations are labelled with their language.<\/li>\n<li><strong>The Sync sitemap is built from your own database<\/strong>, so it lists every language and no longer advertises articles that have not been synced yet.<\/li>\n<\/ul>\n\n<h4>5.9.1<\/h4>\n\n<ul>\n<li><strong>Fix: switching to Sync mode no longer breaks your article URLs.<\/strong> After enabling Sync, <code>\/blog\/{slug}\/<\/code> could serve your theme's archive template (or a 404) instead of the article, because WordPress was still routing on the old rules. The only way out was to open Settings, Permalinks and press Save, which is not something you should ever have to know. The plugin now refreshes those rules by itself on the first page view after a mode switch, front-end or admin.<\/li>\n<li><strong>Fix: FAQ schema now also works in Sync mode.<\/strong> In Sync mode the article is served from your own database, so there is no live call to fetch the question-and-answer pairs from. Those are now stored alongside the post, which means synced articles emit the same FAQPage structured data that 5.9.0 introduced for Live mode. The same goes for the author role, bio and word count.<\/li>\n<\/ul>\n\n<h4>5.9.0<\/h4>\n\n<ul>\n<li><strong>New: FAQ schema on every article.<\/strong> Each Launchmind article carries five question-and-answer pairs. Until now they were plain headings on the page: search engines and AI assistants had no way to recognise them as a FAQ. The plugin now emits proper FAQPage structured data alongside the existing Article schema, so those answers become eligible for rich results and are far easier for ChatGPT, Claude and Perplexity to quote.<\/li>\n<li><strong>New: breadcrumb structured data<\/strong>, so your article shows its place in the site hierarchy in search results instead of a bare URL.<\/li>\n<li><strong>Richer article schema.<\/strong> Author role, bio and photo are now part of the Person block when your profile has them, plus word count and an explicit marker on the article's direct-answer opening. All of it feeds the same goal: making it unambiguous who wrote this and which passage answers the question.<\/li>\n<li><strong>New setting: AI search engine access<\/strong> (Settings, under \"Search and AI visibility\", on by default). Adds explicit allow rules to robots.txt for the crawlers behind ChatGPT, Claude, Perplexity and Google AI Overviews. If those crawlers cannot read your pages, no assistant can cite you, however good the article is. The settings screen also warns you when a robots.txt file in your web root overrides WordPress, or when a CDN may be blocking the crawler before it ever reaches your site.<\/li>\n<li><strong>IndexNow fix: refreshed articles are resubmitted, and the blog path is respected.<\/strong> Two bugs in the existing IndexNow support. It submitted <code>\/blog\/{slug}<\/code> regardless of the Base Path you configured, so anyone using a different path was pinging URLs that do not exist. And once a URL had been submitted it was never submitted again, which meant the platform's content-refresh engine rewrote articles without search engines ever hearing about it. The plugin now tracks the article version and resubmits on change. Existing installs migrate automatically on the first run.<\/li>\n<li>Existing installs keep working unchanged: articles from an older platform response simply skip the new schema blocks.<\/li>\n<\/ul>\n\n<h4>5.8.0<\/h4>\n\n<ul>\n<li><strong>New: Sync content mode \u2014 your articles as real WordPress posts, in your own database.<\/strong> Next to the existing Live mode (articles load straight from Launchmind), you can now choose Sync under Settings \u2192 Content Mode or in the setup wizard. Sync imports every article as a genuine <code>launchmind_article<\/code> post, copies the cover + inline images into your media library, and keeps everything up to date automatically (hourly incremental check, daily full reconciliation). URLs stay byte-identical (<code>\/blog\/{slug}\/<\/code>), so switching modes never moves a page for SEO.<\/li>\n<li><strong>Why this matters.<\/strong> With Sync, your content is genuinely yours: it keeps rendering from your own database even if the connection to Launchmind is ever interrupted. Deactivating or uninstalling the plugin never deletes a single post or image.<\/li>\n<li><strong>Safety rails built in.<\/strong> Posts you edit yourself in WordPress are detected and skipped (flagged on the new Sync tab, with a per-post \"overwrite on next sync\" action). Articles removed on the platform become drafts here \u2014 nothing is ever hard-deleted. A flaky connection can never mass-draft your library: reconciliation only runs after a complete, error-free pass.<\/li>\n<li><strong>New Sync tab<\/strong> on the Launchmind dashboard: last\/next run, progress bar during imports, per-article status list, and a \"Sync now\" button.<\/li>\n<li><strong>Server delta support.<\/strong> Incremental runs use the new <code>updated_since<\/code>\/<code>deleted_since<\/code> API parameters when available and fall back to full hash-based comparison on older servers.<\/li>\n<li>Multisite is untested with Sync mode in this release; everything is per-site (options, cron, media), but network setups should stay on Live mode for now.<\/li>\n<\/ul>\n\n<h4>5.7.1<\/h4>\n\n<ul>\n<li><strong>New: <code>intro=\"\"<\/code> attribute on <code>[launchmind_blog]<\/code> for a per-page custom welcome line.<\/strong> Replaces the auto-generated \"Welcome to {site name}'s blog\u2026\" copy with whatever the customer types, without forcing <code>show_intro=\"false\"<\/code> + a separate text block above the shortcode. Plain text only (HTML is escaped) so the markup stays predictable across themes. Empty value falls back to the language-default welcome. Example: <code>[launchmind_blog intro=\"Welkom op de blog van Whoon. Hier vind je interieurinspiratie.\"]<\/code>.<\/li>\n<li><strong>Settings page: Shortcode Reference card rewritten as a copy-paste cookbook.<\/strong> Adds clearly-labeled examples for the 5.7.0 <code>wp_post_types<\/code> merge, the new <code>intro=\"\"<\/code> attribute, common tweaks (columns, limit, show_excerpt \/ tags), multilingual usage, Q&amp;A-only, and the single-post shortcode. Each example sits under its own H4 so customers can scan instead of decoding an attribute list. No behavior changes for the existing options.<\/li>\n<\/ul>\n\n<h4>5.7.0<\/h4>\n\n<ul>\n<li><strong>New: <code>[launchmind_blog]<\/code> shortcode merges any post type, not just native <code>post<\/code>.<\/strong> Adds a <code>wp_post_types<\/code> attribute (comma-separated) so customers whose own articles live on a custom post type (e.g. Whoon's \"algemene-posts\", a news site's \"news\", a magazine's \"stories\") can mix them into the Launchmind listing alongside their content. Example: <code>[launchmind_blog wp_post_types=\"post,algemene-posts\" columns=\"3\" limit=\"12\"]<\/code>. Default stays <code>wp_post_types=\"post\"<\/code> so existing installs are unaffected. Sanitized with <code>sanitize_key()<\/code> per slug; empty\/garbled values fall back to <code>post<\/code>. Solves the page-builder edge case where Elementor Pro's Posts widget can't easily merge two post types in one query \u2014 drop the shortcode into an HTML\/Shortcode widget instead and the merge happens server-side.<\/li>\n<li><strong>Why this matters.<\/strong> Until now, customers on a custom CPT had to either accept two separate listing widgets (one for their CPT, one for Launchmind) or set up a custom Elementor query ID with PHP. The shortcode now does the merge + chronological sort in one call, no PHP snippet required.<\/li>\n<\/ul>\n\n<h4>5.3.6<\/h4>\n\n<ul>\n<li><strong>Fix: <code>launchmind_article<\/code> CPT now passes Elementor Pro's second visibility gate (<code>show_in_nav_menus<\/code>).<\/strong> v5.3.5 set <code>show_ui=true<\/code> to make our CPT visible to page-builder Source dropdowns, but Elementor Pro filters its post-type list with <code>get_post_types(['public' =&gt; true, 'show_in_nav_menus' =&gt; true])<\/code> \u2014 the standard WP convention for \"linkable content types\". Our CPT had <code>show_in_nav_menus=false<\/code> so we passed the first gate (show_ui) but failed the second. Customers still saw no \"Launchmind Articles\" in Elementor Pro Posts widget after 5.3.5. This release flips <code>show_in_nav_menus<\/code> to track <code>page_builder_compat<\/code> so both gates open together. JetEngine was unaffected by either gate; this only matters for Elementor Pro \/ Loop Grid \/ similar.<\/li>\n<li><strong>Side effect: \"Launchmind Articles\" now appears in Appearance \u2192 Menus.<\/strong> Customers can technically pick a virtual post for a nav menu item, but the picker shows 0 items (we have no real wp_posts rows), so this is a UI no-op rather than a footgun.<\/li>\n<\/ul>\n\n<h4>5.3.5<\/h4>\n\n<ul>\n<li><strong>Fix: <code>launchmind_article<\/code> CPT now visible to Elementor Pro + other page-builder Post widgets.<\/strong> The CPT registration hardcoded <code>show_ui=false<\/code> to keep \"Launchmind Articles\" out of the WordPress admin sidebar. Side effect we hadn't anticipated: Elementor Pro's Posts widget and Loop Grid filter their Source dropdown by <code>show_ui<\/code>, so our CPT was invisible to them even with Page Builder Compatibility enabled. JetEngine used a looser filter and surfaced our CPT either way, masking the issue for sites that primarily used JetEngine. Fix: <code>show_ui<\/code> now tracks <code>page_builder_compat<\/code> (same as <code>public<\/code>, <code>publicly_queryable<\/code>, and <code>show_in_rest<\/code> already did). Admin sidebar suppression is independently controlled by <code>show_in_menu=false<\/code> so the admin UI stays clean. Customers with Page Builder Compatibility ON will see \"Launchmind Articles\" in every builder's Source dropdown after this update.<\/li>\n<li><strong>No customer action needed.<\/strong> Existing JetEngine \/ Bricks \/ Breakdance integrations continue to work unchanged.<\/li>\n<\/ul>\n\n<h4>5.3.4<\/h4>\n\n<ul>\n<li><strong>Fix: legacy <code>lm_&lt;slug&gt;_&lt;random&gt;<\/code> API keys couldn't auto-resolve subscription_id.<\/strong> v5.3.3's auto-heal path only matched the modern <code>lm_&lt;uuid&gt;_&lt;random&gt;<\/code> key format. Customers who signed up before the UUID switch have keys shaped like <code>lm_broadwick_f7670e70...<\/code> \u2014 the slug isn't parseable into a subscription UUID locally, so the regex returned empty and tracking stayed off even after v5.3.3 shipped. Adds a server-side fallback: when the regex doesn't match, the plugin calls <code>\/blog\/customer<\/code> (already authenticated via api_key) and reads <code>subscription.id<\/code> from the response. Result is cached via transient (12h TTL) so it costs at most one API call per half-day. Server endpoint now returns <code>subscription.id<\/code> in its response shape \u2014 read by 5.3.4+ plugins, ignored by older ones.<\/li>\n<li><strong>Backward compatible.<\/strong> Existing UUID-format installs skip the network call entirely (regex hits first). Sites where neither path resolves (no api_key set) still surface the admin notice from 5.3.3.<\/li>\n<\/ul>\n\n<h4>5.3.3<\/h4>\n\n<ul>\n<li><strong>Fix: tracking beacons silently dropped on installs where <code>subscription_id<\/code> was wiped (typically after a plugin re-install).<\/strong> Pre-5.3.3, the JS beacon, server-side PHP beacon, and diagnostic meta tag all read the <code>subscription_id<\/code> plugin option directly and bailed out when empty \u2014 even though the api_key (which stays put across re-installs) embeds the subscription UUID in its <code>lm_&lt;uuid&gt;_&lt;random&gt;<\/code> format. New helper <code>resolve_subscription_id()<\/code> returns the option when set, parses the UUID from api_key when not, and persists the derived value back into the option so subsequent calls skip the regex. Affected installs auto-heal on the next page-load \u2014 no customer action needed.<\/li>\n<li><strong>Always-on analytics tracking \u2014 <code>enable_analytics<\/code> UI toggle removed.<\/strong> The \"Enable analytics tracking\" checkbox in plugin settings is gone. Tracking is mandatory: partner dashboards exist precisely to show traffic, so a hidden off-switch was a footgun (the most common path was a customer flipping it off while testing then forgetting). Sites that have legitimate reasons to suppress server-side beacons can use the <code>launchmind_disable_server_pageview<\/code> filter (PHP) \u2014 that path stays. The <code>launchmind_blog_enable_analytics<\/code> option in the database is now ignored; cleaning it up is a no-op.<\/li>\n<li><strong>Admin notice when subscription_id can't be resolved.<\/strong> When BOTH the option is empty AND the api_key is missing\/malformed (the only state where tracking is genuinely impossible), an amber warning surfaces in WP admin pointing the customer at the settings page. Previously these installs sent zero traffic with no UI signal \u2014 partners assumed their site had no visitors when actually the plugin couldn't beacon anything.<\/li>\n<li><strong>JS beacon detection widened.<\/strong> <code>inject_tracking_script_on_footer<\/code> no longer gates on <code>$GLOBALS['launchmind_blog_post_data']<\/code> alone \u2014 it now uses the same three-path detection (CPT singular | query var | post object) the PHP beacon got in 5.3.2. Sites where the global wasn't populated for the active render path (CPT-singular templates served without the legacy slug interceptor) still get JS beacons.<\/li>\n<\/ul>\n\n<h4>5.3.2<\/h4>\n\n<ul>\n<li><strong>Fix: PHP server-side pageview beacon never fired on legacy slug-rendering sites.<\/strong> v5.2 introduced a server-side PHP beacon that was supposed to count pageviews even when the JS beacon got stripped (cache plugins, ad-blockers). In practice it was hooked to <code>template_redirect<\/code> priority 20, which fires <em>before<\/em> the content\/template filters that populate <code>$GLOBALS['launchmind_blog_post_data']<\/code> under the legacy slug-interception render path. Result: on every site using legacy rendering (which is most of them), the <code>is_singular('launchmind_post') || get_query_var('launchmind_post')<\/code> gate failed, <code>register_shutdown_function<\/code> was never registered, and the beacon silently never fired \u2014 observed across all 4 active WP installs over the 14 days following the v5.2 release. Hook moved to <code>wp_footer<\/code> priority 999 (the same hook the JS beacon already uses), and the gate now reads <code>$GLOBALS['launchmind_blog_post_data']<\/code> like the JS beacon does. Coverage now matches the JS beacon: any render mode that produces a Launchmind article \u2014 CPT singular, virtual query, or legacy slug interception \u2014 sends one server beacon per render. Bot UA filter, opt-out filter, and the existing 30s dedup window with the JS beacon are all unchanged.<\/li>\n<li><strong>Plugin version added to beacon body.<\/strong> Both PHP and JS beacons now ship <code>plugin_version<\/code> in the request body, persisted to event metadata. Lets the backend monitor plugin adoption per customer and verify that fixes like this one are landing on installed sites.<\/li>\n<\/ul>\n\n<h4>5.3.1<\/h4>\n\n<ul>\n<li><strong>Fix: PHP error on ACF fields that don't return a string.<\/strong> The 5.3.0 ACF compatibility hook included a catch-all <code>add_filter('acf\/format_value', 'do_shortcode', 10);<\/code> that fired for <em>every<\/em> ACF field type, including ones that return arrays, integers or booleans (image, gallery, repeater, true\/false, number, relationship, etc.) \u2014 and <code>do_shortcode()<\/code> expects a string. On sites with non-string ACF fields the result was a PHP warning per render, plus the field returning an empty string instead of its actual value. The catch-all has been replaced with a <code>type=text<\/code> scoped filter, matching the existing <code>type=textarea<\/code> and <code>type=wysiwyg<\/code> filters. Net effect: shortcodes still work in <code>text<\/code>, <code>textarea<\/code> and <code>wysiwyg<\/code> ACF fields, but other field types return their native value untouched. Reported by @pippijn on the WordPress.org support forum.<\/li>\n<\/ul>\n\n<h4>5.3.0<\/h4>\n\n<ul>\n<li><strong>Q&amp;A articles get their own filter path \u2014 three flavours.<\/strong> Articles produced by the new Voice Engine cycle now arrive with <code>is_voice_article: true<\/code> and an auto-injected \"Q&amp;A\" tag. Three independent ways for customers to put them on a separate page without writing a line of code: (1) <strong>native taxonomy<\/strong> \u2014 WordPress automatically maps the \"Q&amp;A\" tag into a category\/post_tag term, so <code>\/category\/q-and-a<\/code> (or whatever slug the host theme generates) lists Q&amp;A articles out of the box; (2) <strong>shortcode<\/strong> <code>[launchmind_voice limit=\"6\" columns=\"3\"]<\/code> \u2014 drop on any WP page, behaves exactly like <code>[launchmind_blog]<\/code> but pre-filters to Q&amp;A articles only; (3) <strong>block toggle<\/strong> \u2014 the existing \"Launchmind Blog\" Gutenberg block gains a \"Show only Q&amp;A articles\" toggle in the Filter panel. All three live alongside each other; pick the one that matches your editing workflow.<\/li>\n<li><strong>Optional \"Hide Q&amp;A from main listing\" setting.<\/strong> New toggle under Settings \u2192 Voice Engine. OFF by default (existing sites keep current behaviour: Q&amp;A articles appear in the main blog listing). Enable it on sites that want a clean separation \u2014 Q&amp;A articles only render on the dedicated <code>[launchmind_voice]<\/code> shortcode, the \"Show only Q&amp;A articles\" block, or <code>\/category\/q-and-a<\/code>. Recommended OFF for most sites; flip it ON when you want a dedicated \/qa page that stays distinct from the main blog flow.<\/li>\n<li><strong>Backward-compatible API gate.<\/strong> <code>is_voice_article<\/code> is read with a graceful fallback: when the upstream Launchmind API hasn't yet shipped the field  &hellip;<\/li>\n<\/ul>\n\n<!--section=description-->\n<p>Display AI-powered Launchmind blog content on your WordPress site.<\/p>\n\n<h3>Testing<\/h3>\n\n<p><strong>For WordPress.org Reviewers:<\/strong><\/p>\n\n<p>A demo API key is available for testing purposes:<\/p>\n\n<pre><code>lm_test_demo1234567890\n<\/code><\/pre>\n\n<p>This key provides access to 6 sample blog articles for testing the plugin functionality.<\/p>\n\n<p><strong>Test the connection:<\/strong><\/p>\n\n<ol>\n<li>Install and activate the plugin<\/li>\n<li>Go to <strong>Launchmind<\/strong> in the WordPress admin sidebar<\/li>\n<li>Click the <strong>Settings<\/strong> tab<\/li>\n<li>Enter the demo API key: <code>lm_test_demo1234567890<\/code><\/li>\n<li>Click <strong>Save Settings<\/strong><\/li>\n<li>Click <strong>Test Connection<\/strong> - should show \"Connection successful\"<\/li>\n<li>Go to the <strong>Articles<\/strong> tab to see 6 sample posts<\/li>\n<li>Add the Gutenberg block (<code>Launchmind Blog<\/code>) or use shortcode <code>[launchmind_blog]<\/code> on any page<\/li>\n<\/ol>\n\n<p><strong>Sample articles included:<\/strong><\/p>\n\n<ul>\n<li>10 Tips to Boost Your E-commerce Conversion Rate<\/li>\n<li>The Ultimate Guide to SEO for Online Stores<\/li>\n<li>How to Create a Winning Product Description<\/li>\n<li>Email Marketing Strategies That Actually Work<\/li>\n<li>Social Media Marketing for Small Businesses<\/li>\n<li>Customer Retention: How to Keep Customers Coming Back<\/li>\n<\/ul>\n\n<p><strong>Getting your own API key:<\/strong><\/p>\n\n<p>Sign up at <a href=\"https:\/\/launchmind.io\">launchmind.io<\/a> to get your personal API key for production use.<\/p>\n\n<h3>Privacy Policy<\/h3>\n\n<p>This plugin connects to external Launchmind.io servers to fetch blog content. By using this plugin, you agree to Launchmind's <a href=\"https:\/\/launchmind.io\/terms\">Terms of Service<\/a> and <a href=\"https:\/\/launchmind.io\/privacy\">Privacy Policy<\/a>.<\/p>\n\n<p><strong>Data transmitted:<\/strong>\n* Your Launchmind API key (for authentication)\n* Content requests (post slugs, language preferences)<\/p>\n\n<p><strong>Data NOT transmitted:<\/strong>\n* Personal data of your WordPress site visitors\n* WordPress user information\n* Any other site data<\/p>\n\n<p>All API communication uses HTTPS encryption.<\/p>","raw_excerpt":"Display AI-powered Launchmind blog content on your WordPress site.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/268596","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=268596"}],"author":[{"embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/launchmind"}],"wp:attachment":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=268596"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=268596"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=268596"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=268596"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=268596"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=268596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}