Releases: MehranaMarketing/mehrana-wordpress-plugin
Release list
v5.33.0 — image replace no longer blanks page-builder pages
WebP conversion (replace_media) used a raw SQL REPLACE() on wp_postmeta, which broke PHP-serialized string lengths (Betheme/BeBuilder mfn-page-items etc.) and silently blanked pages. URLs in postmeta are now unserialized, walked and re-serialized; already-corrupt rows are left untouched. Also: find_media_by_url anchors filename matches on a path separator and refuses URLs from another WordPress install on the same host. Supersedes v5.31.1. Sites already affected need a one-off serialized-length repair.
v5.31.1 — serialized-safe image URL replacement
Fixes WebP conversion (replace_media) blanking pages on Betheme/BeBuilder and other sites that store image URLs inside PHP-serialized postmeta/options. URL replacement now unserializes and re-serializes instead of a raw SQL REPLACE(). Sites already affected need a one-off serialized-length repair (run mehrana-fix-serialized.php).
v5.31.0 — Site error journal for SiteWatch
New REST endpoint GET /wp-json/mehrana/v1/site-errors (same API-key auth) returning the last 24h of server-side problems: PHP fatal errors caught at shutdown, wp_mail failures, Contact Form 7 notification failures, lead-webhook failures, WP_DEBUG_LOG fatals, and pending core/plugin/theme updates. Patrick's SiteWatch reads it in the daily check. Journal is a bounded 200-row option; identical errors within 10 minutes collapse into one row.
v5.30.2 — Cloudflare Access headers for the lead webhook
Patrick's /api/public/lead-ingest sits behind Cloudflare Access. The Form Submissions → Patrick card now takes a per-site Access Client ID / Secret (service token) and sends them as CF-Access-Client-Id / CF-Access-Client-Secret.
v5.30.1 — leads forward even when mail fails
Contact Form 7 submissions are forwarded to Patrick on wpcf7_submit (status mail_sent or mail_failed) instead of only after a successful email — a host that can't send mail no longer means a lost lead. Validation failures and spam are still skipped.
v5.30.0 — Form submissions → Patrick
New settings card Form Submissions → Patrick: paste the project's inbound lead-ingest URL and every Contact Form 7, Fluent Forms and Elementor Pro submission is forwarded to Patrick as a lead (one campaign per form). Optional shared-secret header; last-delivery status shown in settings. Filter mehrana_lead_webhook_payload for per-site tweaks.
v5.19.2 — fix corrupted GTM snippet
The GTM head bootstrap had broken identifiers (fun ct io n) since v4.4.5, throwing a SyntaxError and never loading gtm.js. Restored the canonical snippet. Every site using the plugin's GTM injection should update.
v5.19.1 — icons with a root-relative src get their alt too
Fixes images stuck on "Alt deployed · not visible" in Image Factory.
Theme markup written by hand often ships a root-relative src:
<img src="/wp-content/uploads/2024/10/smartphone-1-1.png" />WordPress' attachment_url_to_postid() only understands absolute URLs — it matches against the uploads baseurl and falls back to a guid lookup, both stored absolute — so the alt enforcer could not tell which upload the tag meant and left it untouched. The alt was correctly in the media library the whole time; only the render was missing it.
Root-relative and protocol-relative srcs are now normalised before the lookup, resolving against the origin rather than home_url()'s path so a subdirectory install isn't double-prefixed.
Follows v5.19.0.
v5.19.0 — alt edited in Patrick now reaches the page
An alt edited in Patrick now lands on themes that hard-code their own alt="Image 1", alt="Image 2" — the media library was always correct, the page just never read it.
The final-HTML enforcer used to fill only an empty alt, treating any non-empty one as the author's intent. It now also replaces filler: enumerated placeholders (Image 3, slide 2), camera filenames (DSC_0042), and an alt that is just the file's own name. It substitutes only when the attachment has a real library alt, so an image nobody has written alt for is left exactly as it was. A short human alt that happens to match an SEO-named file ("Nathan Phillips Square" on nathan-phillips-square.jpg) is deliberately kept.
Verified live on hardbodydancer.com.
Also catches up three builds that were hand-installed but never published here (5.17.1, 5.17.2, 5.18.0):
- schema description reads what the team wrote in Patrick, and never publishes raw page-builder shortcodes
{{live.items}}/{{live.ingredients}}/{{live.steps}}resolve on WordPress- Content Monitor: terms stamp their own modified date
- alt deploys purge the pages that display the image (Patrick sends the list from its crawl)
- Woodmart's
data-wood-srcresolves to its attachment
Version note: the header and $version had drifted (5.18.0 vs 5.16.0). WordPress lists the header, the updater compares $version — so sites believed they were current. Both now read 5.19.0.
v5.16.0 — orphaned Rank Math redirects flagged
What changed
LinkLab GET /redirects: orphaned Rank Math rows are now flagged.
The wp_rank_math_redirections table survives plugin deactivation. Until now, linklab_get_redirects listed those leftover rows as normal source: rank_math rules even though nothing on the site serves them (their URLs 404) — seen on hardbodydancer.com.
When the table exists but Rank Math is inactive (class_exists('RankMath') / RANK_MATH_VERSION both absent), rows now report source: 'rank_math_orphaned'. Patrick's Redirects tab uses this to show a not served badge, explain why, and offer one-click Recreate in active store (the create path already skips inactive Rank Math and falls through to the Redirection plugin or the built-in Mehrana store).
No behavior change on sites where Rank Math is active.