{"id":276367,"date":"2026-01-27T06:47:27","date_gmt":"2026-01-27T06:47:27","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/lyzer-ai-blog-automation\/"},"modified":"2026-05-21T05:52:42","modified_gmt":"2026-05-21T05:52:42","slug":"lyzerslab-ai-blog-automation","status":"publish","type":"plugin","link":"https:\/\/tw.wordpress.org\/plugins\/lyzerslab-ai-blog-automation\/","author":11452973,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.0","requires":"5.5","requires_php":"7.4","requires_plugins":null,"header_name":"Lyzerslab AI Blog Automation","header_author":"Lyzerslab","header_description":"A lightweight plugin that allows AI agents to submit blog posts via a frontend form with Markdown support.","assets_banners_color":"","last_updated":"2026-05-21 05:52:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/lyzerslab.com\/wordpress-products\/blog-post-automations-by-agent\/","header_author_uri":"https:\/\/lyzerslab.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":384,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"Zk Rana","date":"2026-01-27 06:47:21"},"1.1.2":{"tag":"1.1.2","author":"Zk Rana","date":"2026-02-19 07:03:54"},"1.1.3":{"tag":"1.1.3","author":"Zk Rana","date":"2026-05-21 05:37:29"},"2.0.0":{"tag":"2.0.0","author":"Zk Rana","date":"2026-05-21 05:52:42"}},"upgrade_notice":{"2.0.0":"<p>Major feature release. After upgrading, go to Lyzer Automations \u2192 API Keys to generate a key before using the REST API.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2","1.1.2","1.1.3","2.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"<strong>Settings Page<\/strong> \u2014 Author, post status, fallback category, and form category configuration.","2":"<strong>API Keys Page<\/strong> \u2014 Generate, enable\/disable, copy, and delete API keys.","3":"<strong>Logs Page<\/strong> \u2014 Stats overview and full audit log with source and IP.","4":"<strong>Frontend Form<\/strong> \u2014 Clean submission form with Markdown editor, tags, categories, featured image, and SEO fields."}},"plugin_section":[],"plugin_tags":[2353,569,323,4608,75277],"plugin_category":[],"plugin_contributors":[254720],"plugin_business_model":[],"class_list":["post-276367","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-automation","plugin_tags-blog","plugin_tags-markdown","plugin_tags-post-submission","plugin_contributors-zk-rana","plugin_committers-zk-rana","plugin_support_reps-zk-rana"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/lyzerslab-ai-blog-automation.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Lyzerslab AI Blog Automation bridges the gap between AI agents and your WordPress blog. Agents can publish posts through a beautifully styled frontend form or directly via the REST API.<\/p>\n\n<p><strong>Phase 1 \u2014 Security + API Foundation<\/strong><\/p>\n\n<ul>\n<li><strong>API Key Authentication<\/strong>: Generate and manage multiple named API keys. All REST API submissions require a valid key via <code>X-Lyzerslab-Key<\/code> header or <code>api_key<\/code> query parameter.<\/li>\n<li><strong>Post Status Control<\/strong>: Choose whether submissions are published immediately, saved as drafts, or queued for pending review.<\/li>\n<li><strong>Enhanced Logging<\/strong>: Every log entry now records the submission source (form vs API) and the request IP address for full audit trails.<\/li>\n<\/ul>\n\n<p><strong>Phase 2 \u2014 AI Content Quality<\/strong><\/p>\n\n<ul>\n<li><strong>Featured Image from Markdown<\/strong>: The first <code>![alt](url)<\/code> in the post body is automatically sideloaded as the featured image. An explicit URL field is also available.<\/li>\n<li><strong>Tags Support<\/strong>: Pass a comma-separated list of tags on form or via API.<\/li>\n<li><strong>Excerpt Support<\/strong>: Custom post excerpts via form and API.<\/li>\n<li><strong>SEO Meta<\/strong>: Submit SEO title and meta description \u2014 stored in native Yoast (<code>_yoast_wpseo_*<\/code>) and Rank Math (<code>rank_math_*<\/code>) fields, plus a plugin-native fallback.<\/li>\n<\/ul>\n\n<p><strong>Core Features<\/strong><\/p>\n\n<ul>\n<li><strong>REST API Endpoint<\/strong> at <code>\/wp-json\/lyzerslab\/v1\/submit<\/code> (POST, JSON body)<\/li>\n<li><strong>Frontend Submission Form<\/strong> via <code>[lyzerslab_post_submission]<\/code> shortcode<\/li>\n<li><strong>Markdown Parser<\/strong>: Headings, Bold\/Italic\/Strikethrough, Lists, Code (inline + fenced blocks), Blockquotes, Links, Images, Horizontal Rules<\/li>\n<li><strong>Multi-Category Support<\/strong>: Admin controls which categories appear on the form<\/li>\n<li><strong>Beautiful Admin UI<\/strong>: Modern card-based design with stats dashboard on the logs page<\/li>\n<li><strong>Internationalization-ready<\/strong>: Full i18n support<\/li>\n<\/ul>\n\n<h3>REST API<\/h3>\n\n<p><strong>Endpoint:<\/strong> <code>POST \/wp-json\/lyzerslab\/v1\/submit<\/code><\/p>\n\n<p><strong>Headers:<\/strong>\n    X-Lyzerslab-Key: llk_your_key_here\n    Content-Type: application\/json<\/p>\n\n<p><strong>Body (all except title + body are optional):<\/strong><\/p>\n\n<pre><code>`json\n<\/code><\/pre>\n\n<p>{\n  \"title\": \"Post Title\",\n  \"body\": \"# Markdown body\",\n  \"excerpt\": \"Short summary\",\n  \"tags\": \"ai, automation\",\n  \"categories\": [1, 3],\n  \"image_url\": \"https:\/\/example.com\/hero.jpg\",\n  \"seo_title\": \"Custom SEO Title\",\n  \"seo_description\": \"Meta description for search engines\"\n}\n    `<\/p>\n\n<p><strong>Response:<\/strong>\n    <code>json\n{ \"success\": true, \"post_id\": 42, \"post_url\": \"https:\/\/yoursite.com\/post-title\" }<\/code><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>lyzerslab-ai-blog-automation<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate via the \"Plugins\" menu.<\/li>\n<li>Go to <strong>Lyzer Automations \u2192 API Keys<\/strong> and generate a key for your agent.<\/li>\n<li>Configure author, post status, and categories under <strong>Lyzer Automations \u2192 Settings<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20api%20key%20authentication%20required%3F\"><h3>Is API key authentication required?<\/h3><\/dt>\n<dd><p>For the REST API endpoint, yes \u2014 a valid active key must be sent. The frontend form uses a WordPress nonce instead.<\/p><\/dd>\n<dt id=\"what%20post%20statuses%20can%20i%20use%3F\"><h3>What post statuses can I use?<\/h3><\/dt>\n<dd><p>publish, <code>draft<\/code>, or <code>pending<\/code> \u2014 configurable in settings per-site. The API or form always uses whichever status is configured.<\/p><\/dd>\n<dt id=\"which%20seo%20plugins%20are%20supported%3F\"><h3>Which SEO plugins are supported?<\/h3><\/dt>\n<dd><p>SEO meta is written to Yoast SEO (<code>_yoast_wpseo_title<\/code>, <code>_yoast_wpseo_metadesc<\/code>) and Rank Math (<code>rank_math_title<\/code>, <code>rank_math_description<\/code>) fields simultaneously, plus a plugin-native meta key as fallback.<\/p><\/dd>\n<dt id=\"how%20does%20featured%20image%20sideloading%20work%3F\"><h3>How does featured image sideloading work?<\/h3><\/dt>\n<dd><p>If an <code>image_url<\/code> is provided (or an <code>![alt](url)<\/code> image exists in the Markdown body), the plugin uses WordPress's <code>media_sideload_image()<\/code> to download and attach it as the post thumbnail.<\/p><\/dd>\n<dt id=\"what%20markdown%20is%20supported%3F\"><h3>What Markdown is supported?<\/h3><\/dt>\n<dd><p>Headings (H1\u2013H6), bold, italic, bold+italic, strikethrough, unordered\/ordered lists, fenced code blocks (```), inline code, blockquotes, links, images, and horizontal rules.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Added: API Key authentication system (generate, manage, enable\/disable, delete keys).<\/li>\n<li>Added: REST API endpoint <code>POST \/wp-json\/lyzerslab\/v1\/submit<\/code> accepting JSON body.<\/li>\n<li>Added: Post status control (publish \/ draft \/ pending) in settings.<\/li>\n<li>Added: Request source (form\/api) and IP address recorded in every log entry.<\/li>\n<li>Added: Tags support via form field and API <code>tags<\/code> parameter.<\/li>\n<li>Added: Excerpt support via form field and API <code>excerpt<\/code> parameter.<\/li>\n<li>Added: SEO meta (title + description) \u2014 writes to Yoast, Rank Math, and native meta.<\/li>\n<li>Added: Featured image sideloading from explicit URL or auto-detected from first Markdown image.<\/li>\n<li>Added: Fenced code blocks (```), strikethrough (~~), H4\u2013H6, horizontal rules in Markdown parser.<\/li>\n<li>Added: Beautiful admin UI with stats dashboard on logs page.<\/li>\n<li>Added: Admin and frontend CSS assets (enqueued, not inline).<\/li>\n<li>Added: API Keys dedicated admin page.<\/li>\n<li>Changed: Logs now show source, IP, and colour-coded rows.<\/li>\n<li>Changed: Log limit raised to 300 entries.<\/li>\n<li>Improved: IP detection supports Cloudflare and reverse proxies.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Checking WordPress 7.0 compatibility<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Added: Multi-category settings so admins can choose which categories appear on the submission form.<\/li>\n<li>Added: Category selection field on the frontend form.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed: Replaced deprecated <code>get_page_by_title()<\/code> with <code>WP_Query<\/code> for WordPress 6.2+ compatibility.<\/li>\n<li>Fixed: Corrected text domain to match plugin slug.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Allow AI agents to submit blog posts via a frontend form or REST API with API key authentication, tags, excerpts, featured images, and SEO meta suppor &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/276367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=276367"}],"author":[{"embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/zk-rana"}],"wp:attachment":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=276367"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=276367"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=276367"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=276367"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=276367"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=276367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}