Skip to content

Releases: diecieventi/system-markdown-alternate

v0.49.3

Choose a tag to compare

@github-actions github-actions released this 28 Aug 15:27
941f94d

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

Choose a tag to compare

@github-actions github-actions released this 26 Aug 20:29
3ebc638

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 a text/markdown response 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_enabled is 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

Choose a tag to compare

@github-actions github-actions released this 26 Aug 20:15
55d422b

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
    the post and page content 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

Choose a tag to compare

@github-actions github-actions released this 26 Aug 19:26
041dbd4

v0.49.0

  • Added: pages now point at the site's /llms.txt with the rel="describedby" link relation introduced by version 2 of the llms.txt specification, in both the HTML head and the HTTP Link: 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.txt exists. Emitted only where the Markdown alternate is already emitted and only while this plugin's own /llms.txt is 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 now link_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

Choose a tag to compare

@github-actions github-actions released this 25 Aug 20:58
b02d4b9

v0.48.0

  • Added: a per-known-bot-name breakdown in the .md hit 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 the bot total, 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

Choose a tag to compare

@github-actions github-actions released this 22 Aug 19:38
5467cf3

v0.47.1

  • Fixed: a text custom field containing Markdown punctuation was published with
    that punctuation active — a field reading A *literal* marker arrived 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

Choose a tag to compare

@github-actions github-actions released this 22 Aug 12:53
13cacc8

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_keys never 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 dedicated sysmda_markdown_appended_html filter (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

Choose a tag to compare

@github-actions github-actions released this 22 Aug 07:02
45800c3

v0.46.1

  • Fixed: an ACF subtitle containing Markdown punctuation was parsed instead of
    read. A subtitle of A *literal* marker was 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 its aria-label or title like any other link
    that renders nothing. Card and link-preview plugins fill an overlay link with
    &nbsp; 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

Choose a tag to compare

@github-actions github-actions released this 21 Aug 19:48
d095d02

v0.46.0

  • Bricks pages now get a real .md (Phase 2 of the page-builder plan;
    bricks leaves BuilderDetector::AWAITING_ADAPTER, which is the whole
    phasing mechanism — no other rule changed). The new BricksAdapter renders
    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" shape BuilderDetector already
    used. A new BuilderAdapter interface 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 ordinary post_content pipeline 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 swaps src for an inline SVG placeholder and moves the real
    URL to data-src unless \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
    ![](url) 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 way sysmda_markdown_excluded_classes
    excludes a CSS class. Additive to the built-in defaults, never a
    replacement (the 0.40.0 rule). The existing md-exclude class 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
    template element'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_gmt does not.
  • The front-matter description fallback and /llms.txt entries 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's post_content is 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 foreign the_content callbacks — a related-posts
    block, a CTA — while Bricks' own post-content element renders, since that
    element calls the full the_content chain internally and would otherwise
    reintroduce exactly the injected content this pipeline avoids everywhere
    else. Flagged as a maintainer-reversible design choice; return false from
    the filter to accept whatever a real visitor sees there instead.
  • sysmda_markdown_prewarm stays 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

Choose a tag to compare

@github-actions github-actions released this 20 Aug 17:55
e4e2ba3

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.