{"id":356490,"date":"2026-09-07T06:01:47","date_gmt":"2026-09-07T06:01:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/postie-blocks-addon\/"},"modified":"2026-09-07T06:01:19","modified_gmt":"2026-09-07T06:01:19","slug":"slnwp-blocks-for-postie","status":"publish","type":"plugin","link":"https:\/\/fuc.wordpress.org\/plugins\/slnwp-blocks-for-postie\/","author":15236178,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.19","stable_tag":"0.1.19","tested":"7.1","requires":"6.2","requires_php":"8.2","requires_plugins":null,"header_name":"SLNWP Html and MD Blocks for Postie","header_author":"James Harvey","header_description":"Addon for Postie that converts emailed content into native Gutenberg blocks (paragraphs, headings, images, lists, quotes) instead of Postie's default raw HTML output - with optional Markdown parsing for senders who want to style their email more expressively.","assets_banners_color":"176598","last_updated":"2026-09-07 06:01:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/soulsong-uk\/slnwp-blocks-for-postie","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":27,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.19":{"tag":"0.1.19","author":"jainanda","date":"2026-09-07 06:01:19","revision":3684238}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3684239,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3684239,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3684239,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3684354,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3684354,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.19"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3684239,"resolution":"1","location":"assets","locale":"","width":1200,"height":934}},"screenshots":{"1":"The plugin's settings page, under Postie's menu - turn HTML block conversion and Markdown parsing on or off independently."}},"plugin_section":[],"plugin_tags":[4121,267,148076,4608,36014],"plugin_category":[41],"plugin_contributors":[279503],"plugin_business_model":[],"class_list":["post-356490","plugin","type-plugin","status-publish","hentry","plugin_tags-blocks","plugin_tags-email","plugin_tags-gutenberg","plugin_tags-markdown","plugin_tags-postie","plugin_category-communication","plugin_contributors-jainanda","plugin_committers-jainanda"],"banners":{"banner":"https:\/\/ps.w.org\/slnwp-blocks-for-postie\/assets\/banner-772x250.jpg?rev=3684354","banner_2x":"https:\/\/ps.w.org\/slnwp-blocks-for-postie\/assets\/banner-1544x500.jpg?rev=3684354","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/slnwp-blocks-for-postie\/assets\/icon.svg?rev=3684239","icon":"https:\/\/ps.w.org\/slnwp-blocks-for-postie\/assets\/icon.svg?rev=3684239","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/slnwp-blocks-for-postie\/assets\/screenshot-1.jpg?rev=3684239","caption":"The plugin's settings page, under Postie's menu - turn HTML block conversion and Markdown parsing on or off independently."}],"raw_content":"<!--section=description-->\n<p>This is an addon for the Postie plugin (email-to-post). It does nothing on its own - Postie must be installed and active.<\/p>\n\n<p>By default, Postie saves emailed content as a flat HTML\/text blob, so a post created from an email opens in the block editor as one big Classic\/HTML block rather than proper paragraph\/heading\/image blocks - and a big blob is difficult to edit afterward.<\/p>\n\n<p>SLNWP Html and MD Blocks for Postie converts that emailed content into real, individually-editable Gutenberg blocks before the post is saved with the ability to further format using markdown syntax within <code>&lt;md&gt;...&lt;\/md&gt;<\/code>.<\/p>\n\n<ul>\n<li>Rich HTML emails (Outlook\/Gmail-style formatted mail) are normalized into blocks.<\/li>\n<li>Markdown syntax (<code>#<\/code>\/<code>##<\/code> headings, blank-line paragraphs, <code>**bold**<\/code>, <code>[links](url)<\/code>, <code>*<\/code>\/<code>-<\/code> lists, <code>&gt;<\/code> quotes) wrapped in an explicit <code>&lt;md&gt;...&lt;\/md&gt;<\/code> block is parsed into native blocks. See the FAQ below.<\/li>\n<li>Emailed photo attachments become <code>core\/image<\/code> blocks referencing the real WordPress attachment Postie already created, not bare <code>&lt;img&gt;<\/code> tags.<\/li>\n<li>Bullet and numbered lists become real <code>core\/list<\/code> blocks (with each item as its own <code>core\/list-item<\/code>, including nested sub-lists), not plain text.<\/li>\n<li>Blockquotes (<code>&gt;<\/code>) become real <code>core\/quote<\/code> blocks, with their contents as native inner blocks.<\/li>\n<li>Anything not yet natively mapped (code, tables - deferred past v1) falls back to a <code>core\/html<\/code> block, so content is never silently dropped.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate Postie first.<\/li>\n<li>Install and activate this plugin.<\/li>\n<li>Optionally visit Postie's settings &gt; HTML &amp; Markdown Blocks to toggle Markdown parsing and\/or Gutenberg block conversion independently (both on by default).<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20get%20markdown%20syntax%20converted%3F\"><h3>How do I get Markdown syntax converted?<\/h3><\/dt>\n<dd><p>Wrap the part of the email you want parsed as Markdown in <code>&lt;md&gt;<\/code> and <code>&lt;\/md&gt;<\/code> tags, each on their own line:<\/p>\n\n<pre><code>&lt;md&gt;\n# My Heading\n* A list item\n* Another item\n&lt;\/md&gt;\n<\/code><\/pre>\n\n<p>This is deliberate, not automatic: this plugin never guesses whether some arbitrary content \"looks like\" Markdown - only content inside an explicit <code>&lt;md&gt;...&lt;\/md&gt;<\/code> block is ever parsed as Markdown. Content outside the wrapper (or the whole email, if you don't use one) is treated as plain content. As a side benefit, content inside <code>&lt;md&gt;...&lt;\/md&gt;<\/code> is also fully shielded from Postie's own content-processing (its newline-collapsing, <code>---<\/code>-line signature stripping, and <code>#subject#<\/code> inline-subject extraction all run before this plugin ever sees the content, and could otherwise silently damage unwrapped Markdown syntax that happens to resemble one of those conventions) - using <code>&lt;md&gt;<\/code> sidesteps all of that automatically, with no workaround needed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.19<\/h4>\n\n<ul>\n<li>Change: text domain is now slnwp-blocks-for-postie to match the WordPress.org plugin slug, so translate.wordpress.org language packs load<\/li>\n<\/ul>\n\n<h4>0.1.18<\/h4>\n\n<ul>\n<li>Change: Cosmetic rename to \"SLNWP Html and MD Blocks for Postie\" (slug slnwp-blocks-for-postie): display name, bootstrap filename, Plugin URI, readme title, and Strings copy - namespace, constants, option name, text domain unchanged<\/li>\n<\/ul>\n\n<h4>0.1.17<\/h4>\n\n<ul>\n<li>Fix: an email link that a mail client auto-linked a second time (producing an anchor nested inside another anchor - e.g. a mailto: from a Word doc re-linked by Gmail\/Thunderbird) no longer produces an invalid block; the redundant outer link is flattened away before conversion.<\/li>\n<\/ul>\n\n<h4>0.1.16<\/h4>\n\n<ul>\n<li>Fix: text alignment set on a container element (a centered <\/li>\n<\/ul>\n\n<p>&lt;<\/p>\n\n<p>div&gt;\/, or an aligned<\/p>\n\n<p>&lt;<\/p>\n\n<p>div&gt; that only uses <br \/> for line breaks - as Outlook\/OWA and Word produce) is now inherited by the paragraphs, headings, lists and images inside it, instead of being dropped.<\/p>\n\n<h4>0.1.15<\/h4>\n\n<ul>\n<li>New: settings page is now dark-mode aware - its bracketed-card panels and the  example box get a readable dark palette when a WP dashboard dark-mode plugin (body.dark-mode) is active.<\/li>\n<\/ul>\n\n<h4>0.1.14<\/h4>\n\n<ul>\n<li>Change: shorten display name to 'Soulsong HTML and MD Blocks for Postie' ('Markdown' -&gt; 'MD'); display name only - no functional change.<\/li>\n<\/ul>\n\n<h4>0.1.13<\/h4>\n\n<ul>\n<li>Change: rename to Soulsong HTML and Markdown Blocks for Postie (branding only - no functional change).<\/li>\n<li>Housekeeping: require PHP 8.2, mark tested up to WordPress 7.1, update contributor info.<\/li>\n<\/ul>\n\n<h4>0.1.12<\/h4>\n\n<ul>\n<li>Fix: a block-level element (e.g. a heading) malformed mail-client HTML left nested inside a paragraph no longer produces an invalid block - it now converts to its own proper block instead of being flattened into the paragraph's raw HTML<\/li>\n<li>Fix: leftover non-visible markup (e.g. Word's  tags) no longer produces a pointless blank paragraph block at the top of the post<\/li>\n<\/ul>\n\n<h4>0.1.11<\/h4>\n\n<ul>\n<li>Fix: mail-client HTML (e.g. Word paste) wrapped in a <\/li>\n<\/ul>\n\n<p>&lt;<\/p>\n\n<p>div&gt; no longer collapses into a single opaque HTML block instead of converting to real blocks\n* Fix: an inline image wrapped in a no-op  (e.g. Word's mso-no-proof span) now becomes its own image block instead of being lost inside a paragraph\n* New: preserve paragraph\/heading text alignment and image alignment (left\/center\/right) from the source HTML\n* Fix: converted heading blocks now include the wp-block-heading class Gutenberg expects<\/p>\n\n<h4>0.1.10<\/h4>\n\n<ul>\n<li>Change: renamed from Postie Blocks Addon to HTML and Markdown Blocks for Postie - slug, namespace, constants, option name (with automatic migration), settings menu slug, and CSS classes all updated to match; no functional changes<\/li>\n<\/ul>\n\n<h4>0.1.9<\/h4>\n\n<ul>\n<li>Fix: WordPress.WP.I18n.NonSingularStringLiteralText Plugin Check error - Strings::get() now looks up a plain array of pre-translated strings instead of passing a dynamic value into __(), since __()'s first argument must be a literal string for WordPress's translation tooling to find it<\/li>\n<\/ul>\n\n<h4>0.1.8<\/h4>\n\n<ul>\n<li>Change: Markdown is now only ever parsed inside an explicit ... block - the previous heuristic that guessed whether arbitrary content looked like Markdown has been removed entirely<\/li>\n<li>Change: settings page rewritten in the positive (what each setting does, not what breaks when off), with the now-unnecessary Recommended\/Known Conflict sections removed<\/li>\n<li>Change: Markdown toggle renamed to 'Convert Markdown to Gutenberg Blocks' with a worked  example shown directly on the settings page<\/li>\n<\/ul>\n\n<h4>0.1.7<\/h4>\n\n<ul>\n<li>Change: renamed from Postie Markdown Blocks to Postie Blocks Addon - block conversion is the primary feature, Markdown parsing is a secondary\/optional one. Namespace, constants, option name (with automatic migration), settings slug, and CSS classes all updated to match; no functional changes<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>New: blockquotes now convert to real core\/quote blocks (with native inner blocks) instead of falling back to core\/html<\/li>\n<li>Change: settings page and readme FAQ now lead with the ... marker as the single recommended fix for all of Postie's own content-processing conflicts, not just the list one<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>New: independent settings toggles for Markdown parsing and Gutenberg block conversion - block conversion can now be turned off entirely (previously always on)<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>New: wrap Markdown content in ... to shield it from Postie's own newline-collapsing and signature\/subject-marker collisions - fixes lists and headings-followed-by-lists coming through merged or corrupted<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Fix: Markdown list items with mail-client whitespace padding right after the marker were becoming indented code blocks instead of plain list text<\/li>\n<li>Fix: literal backslashes in emailed content (e.g. Windows file paths) were being doubled when Postie saved the post - now preserved correctly<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Fix: Markdown was never parsed for real mail-client HTML - Thunderbird wraps each paragraph in its own <\/li>\n<\/ul>\n\n<p>&lt;<\/p>\n\n<p>p&gt;, which made every paragraph individually opaque to Parsedown's raw-HTML-passthrough rule\n* Fix: a bare URL auto-linked by the mail client inside Markdown image\/link syntax (e.g. Thunderbird's freetext links) broke image\/link recognition - now unwrapped before parsing\n* New: bullet and numbered lists now convert to real core\/list blocks (with nested sub-list support) instead of falling back to core\/html<\/p>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Fix: inline images within paragraph text now become their own core\/image block instead of being embedded in the paragraph's HTML<\/li>\n<li>Fix: plain-text paragraphs and text preceding an inline image were silently dropped due to a simple_html_dom quirk (children() excludes text nodes)<\/li>\n<li>Fix: Markdown detection now based on content patterns rather than which MIME part the email populated, so HTML-wrapped plain-text emails (Gmail\/Outlook) no longer collapse to one block<\/li>\n<li>Fix: horizontal rules (---) now become a core\/separator block instead of being silently dropped<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: Markdown\/HTML -&gt; Gutenberg blocks conversion for paragraphs, headings, and images.<\/li>\n<\/ul>","raw_excerpt":"Converts Postie&#039;s emailed-in post content (Markdown plain-text or rich HTML) into native Gutenberg blocks instead of raw HTML.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/356490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=356490"}],"author":[{"embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jainanda"}],"wp:attachment":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=356490"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=356490"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=356490"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=356490"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=356490"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=356490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}