Releases: diecieventi/system-markdown-alternate
Releases · diecieventi/system-markdown-alternate
Release list
v0.49.3
v0.49.3
- Updated the wordpress.org listing screenshots (
.wordpress-org/screenshot-1.png
through-5.png) to the current settings panel — the previous set was several
versions out of date (v0.35.2) and missing panel sections shipped since
(Extra custom fields, Excluded builder elements, the hit counter's named-bot
breakdown). Added a sixth screenshot showing the[sysmda_md_actions]
front-end split button (copy/view/download), with a matching caption in
readme.txt. Metadata and repository tooling only — no plugin code, output
or behaviour changes.
v0.49.2
v0.49.2
- The Live Preview blueprint (
.wordpress-org/blueprints/blueprint.json) now
lands on the site's front page (/) instead of/hello-world.md. Landing
directly on atext/markdownresponse gave a first-time visitor a download
or a wall of unstyled plain text with no context — not a demo. The seed
content every fresh WordPress install carries (the "Hello world!" post, the
"Sample Page" page) already exercises both enabled post types and
/llms.txt, and a real front page a visitor can click around makes a
better first impression.sysmda_llms_txt_enabledis now also set
explicitly in the blueprint (already on by default, but demonstrated
regardless of that default). Metadata and repository tooling only — no
plugin code, output or behaviour changes.
v0.49.1
v0.49.1
- The plugin now ships a
.wordpress-org/blueprints/blueprint.json, enabling
wordpress.org's Live Preview button on the plugin's listing page:
visitors can try the plugin live, active, in WordPress Playground (a
WASM WordPress running in the browser) with no install. The blueprint
installs the plugin from its own published wordpress.org release, enables
thepostandpagecontent types, sets pretty permalinks and lands on
the seed post's.md— the most direct demonstration of what the plugin
does. Metadata and repository tooling only — no plugin code, output or
behaviour changes; not bundled into the plugin zip.
v0.49.0
v0.49.0
- Added: pages now point at the site's
/llms.txtwith therel="describedby"link relation introduced by version 2 of the llms.txt specification, in both the HTML head and the HTTPLink:header — alongside the Markdown alternate they already advertised. An agent landing on any article can find the site's index without having to guess that/llms.txtexists. Emitted only where the Markdown alternate is already emitted and only while this plugin's own/llms.txtis enabled, so the link never points at an endpoint that is not being served; there is no new setting. - Changed:
MarkdownController::link_header_has_alternate()is nowlink_header_has_relation()and takes the relation to look for. It is an internal helper, public only so its parsing can be exercised from the test suite; no documented filter or output contract refers to it.
v0.48.0
v0.48.0
- Added: a per-known-bot-name breakdown in the
.mdhit counter. Below the
existing bot/human totals, a second table names any of a short curated list —
ClaudeBot,GPTBot,PerplexityBot,CCBot, matched together with their
user-initiated variants (Claude-User,ChatGPT-User,OAI-SearchBot,
Perplexity-User) — with at least one hit in the last 30 days. A crawler
never seen gets no row at all, rather than a permanent zero. Still
aggregate-only and count-only: it names a few crawlers already counted
inside thebottotal, it does not add any new stored data, IP address,
raw user-agent string or per-visitor identifier. New filter
sysmda_md_hits_named_bot_patterns(Advanced), independent of the existing
sysmda_md_hits_bot_patterns— one decides bot vs human, the other only
names a match already counted as a bot.
v0.47.1
v0.47.1
- Fixed: a text custom field containing Markdown punctuation was published with
that punctuation active — a field readingA *literal* markerarrived with one
word in italics instead of the asterisks the author typed. Underscores,
brackets and backslashes were the same case. Each value was wrapped in a
<div>, and that wrapper silently switched off the escaping every other piece
of text in the document gets. Values are now separated by a blank line instead,
which restores the escaping and keeps them apart; markup from a WYSIWYG field
is unaffected and still converts as before. - Fixed: listing a custom field whose value contains Gutenberg block markup
alongside plain-text fields ran those text fields together on one line. One
block-valued field sent every sibling down the block path, where plain text is
emitted without paragraphs.
v0.47.0
v0.47.0
- Added: Extra custom fields — a new setting listing the post meta keys whose
values belong in the Markdown. Their content is appended to the end of the
body, in the order listed. One setting covers ACF, JetEngine, Meta Box and
WordPress's own Custom Fields box, because underneath they all store post meta,
so a page whose text comes partly from a template's fields is no longer
published half missing. Empty by default and never detected automatically: a
field starts appearing when you type its key into the box, and not before.
Values that are not text — an image, a repeater, anything stored as an array —
are skipped rather than guessed at. - Added:
sysmda_markdown_extra_meta_keys(Stable) as the filter behind the new
setting, so the list can be varied per post from code. - Changed: a post that does not carry any of the configured keys keeps its
document and its cache validator byte-identical, so configuring a field for a
couple of landing pages does not make every article on the site revalidate. - Fixed: ACF field values added through
sysmda_acf_field_keysnever reached a
Bricks page's Markdown. Such a page is rendered through Bricks' own API, which
does not read the post content the values were appended to, so they were
dropped silently — since 0.46.0. Both they and the new custom fields now go
through a dedicatedsysmda_markdown_appended_htmlfilter (Advanced) that is
honoured on every render path. - Fixed: the Excluded builder elements setting added in 0.46.0 was not removed
on uninstall.
v0.46.1
v0.46.1
- Fixed: an ACF subtitle containing Markdown punctuation was parsed instead of
read. A subtitle ofA *literal* markerwas emitted raw between the emphasis
delimiters, so the reader's own asterisks took part in the formatting and the
single italic line came out as three runs of emphasis. Subtitle text is now
escaped the same way the article body is, so it reads back exactly as typed —
asterisks, underscores, brackets, backslashes and a leading#included. - Fixed: a link whose body is a non-breaking space (or another invisible
character) is now named from itsaria-labelortitlelike any other link
that renders nothing. Card and link-preview plugins fill an overlay link with
rather than leaving it truly empty, and those links were still
arriving as[](url "Name")— with the name in the tooltip and nothing tying
it to the address. - Changed: the documentation site is now built on every pull request instead of
only after merging, so a broken page cannot reach the published site.
v0.46.0
v0.46.0
- Bricks pages now get a real
.md(Phase 2 of the page-builder plan;
bricksleavesBuilderDetector::AWAITING_ADAPTER, which is the whole
phasing mechanism — no other rule changed). The newBricksAdapterrenders
a Bricks-mode post through Bricks' own\Bricks\Frontend::render_data()
rather than reimplementing its element types, the same "read the builder's
data to decide, read the vendor to render" shapeBuilderDetectoralready
used. A newBuilderAdapterinterface and a third branch in
ContentRenderer::render(), tried before the block/classic branches, is the
seam:sysmda_markdown_builder_adapters(Advanced) is the extension point.
A post switched back to Render with WordPress is unaffected — the adapter
requires the render mode AND the Bricks plugin active, so with either
missing the ordinarypost_contentpipeline is the correct answer, exactly
as it was before this release. - Fixed the one defect the Phase 0 reconnaissance found: Bricks' own image
lazy-loading swapssrcfor an inline SVG placeholder and moves the real
URL todata-srcunless\Bricks\Database::$page_settings['disableLazyLoad']
is set for the render — the adapter now brackets every render with a
save/restore of that flag, so every Bricks image converts to a normal
instead of a meaningless data URI. - New exclusion list:
sysmda_markdown_excluded_builder_elements
(Stable), a panel field and filter for page-builder chrome — Bricks'
form, nav menu, share bar, table of contents and breadcrumbs elements are
excluded by default, the same waysysmda_markdown_excluded_classes
excludes a CSS class. Additive to the built-in defaults, never a
replacement (the 0.40.0 rule). The existingmd-excludeclass already
worked on Bricks elements with no code change needed — Bricks emits it
verbatim on the element's wrapper. - The cache validator now covers Bricks content: the render mode, a hash
of the stored element tree, and the modification date of any referenced
templateelement's own post are folded into the existing dependency
fingerprint, so a mode flip or a template edit moves the ETag even though
post_modified_gmtdoes not. - The front-matter
descriptionfallback and/llms.txtentries now have
a Bricks-aware last resort, after Rank Math and the excerpt: a cheap,
unrendered read of the stored tree's text-bearing settings, run through the
same exclusion pass as the body. A Bricks post'spost_contentis never
used for this, even when the adapter's fallback finds nothing — it can hold
stale prose left over from before the page was rebuilt in Bricks, and
publishing that would reproduce, in the description field, the exact
"confidently wrong" failure the page-builder veto exists to prevent in the
body. - Advanced-level toggle:
sysmda_markdown_builder_suppress_content_filters
(default on) removes foreignthe_contentcallbacks — a related-posts
block, a CTA — while Bricks' ownpost-contentelement renders, since that
element calls the fullthe_contentchain internally and would otherwise
reintroduce exactly the injected content this pipeline avoids everywhere
else. Flagged as a maintainer-reversible design choice; returnfalsefrom
the filter to accept whatever a real visitor sees there instead. sysmda_markdown_prewarmstays off for Bricks posts as for everything else:
element-level visibility conditions are unverified under WP-Cron's missing
request context (documentation only, no code change).- Elementor remains the only builder in
AWAITING_ADAPTER; Divi, WPBakery,
Oxygen, Beaver Builder and Breakdance stay permanently unsupported.
v0.45.1
v0.45.1
- Fixed: the
[sysmda_md_actions]dropdown opened off to the right of the
button instead of below it. The menu was anchored to the caret rather than to
the split button as a whole, so its left edge started halfway across the
control and the panel hung out over the text beside it. It is now aligned to
the button's own edge and drops straight below, which is what the control
looked like it should do all along. - Fixed: the fallback placements now run only when they are needed, and they
handle the awkward cases better. The menu switches to the opposite alignment
when the button sits too close to the screen edge, flips above the button when
there is no room below, and — where there is room on neither side — caps its
height and scrolls instead of growing across the button it belongs to. On a
right-to-left site both alignments mirror. - Changed: the menu is sized to its own content instead of a fixed 250 px, with
the same width as its floor, so a longer translated label is no longer squeezed
into two lines while a narrow screen still keeps it inside the viewport.