Midvash Bible References

Description

Midvash Bible References finds Bible references in your content and quietly turns each one into a styled link with a hover-tooltip that shows the verse text — fetched live from the Midvash Bible API and cached locally for performance. No account and no configuration required for the default experience.

It works on any post or page in any of nine languages, recognises both the full book name (“John 3:16”) and the standard abbreviation of the site’s language (“Jn 3:16” in English, “Jo 3:16” in Portuguese), accepts the colon and dot separators, supports verse ranges (“John 3:16-18”) and chapter-only references (“Psalms 23”), and links each reference to the matching verse on midvash.com using the locale-appropriate URL.

What you get

  • Auto-detection of Bible references in the_content (posts and pages) — including localised book names and abbreviations across 9 languages.
  • Hover tooltip with the verse text, fetched from the public Midvash API and cached for 30 days by default.
  • Gutenberg block “Bible Verse — Midvash” (category: Text) to insert any verse explicitly in the block editor with per-block version, language and style overrides.
  • Verse of the Day widget (Appearance Widgets) and [mvbr_votd] shortcode.
  • Schema.org Quotation microdata on every reference link, helping search engines surface rich results for verse pages.
  • 9 user-facing locales: Portuguese (Brazil), English, Spanish, French, German, Italian, Russian, Korean, Chinese (Simplified) — each with localised book names, slugs, abbreviations and URLs.
  • 69 Bible versions across those locales (October 2026), listed dynamically from the API as new translations are added.
  • Dark mode via prefers-color-scheme and matching opt-in body classes (dark-mode, theme-dark, wp-dark-mode).
  • Accessibility: keyboard focus, ARIA roles, reduced-motion support, print styles.
  • Customisable link styling — colour, underline (style + colour), open in new tab, show/hide version in tooltip.

Supported reference formats

  • John 3:16 / João 3:16 / Juan 3:16 / Jean 3:16 / Johannes 3:16 / Giovanni 3:16 / Иоанн 3:16 / 요한복음 3:16 / 约翰福音 3:16
  • John 3.16 (alternative separator)
  • John 3:16-18 (verse ranges, up to 50 verses)
  • Gn 1:1, Jn 3:16 (the abbreviations of the language chosen in Settings, written with chapter and verse)
  • Psalms 23 / Salmos 23 / Psaumes 23 (chapter-only, full book name)

Only the language chosen in Settings is matched, book names start with a capital letter and abbreviations must be written exactly, so everyday words are left alone: “Os 13 apóstolos”, “at 10:30”, “is 5” or “Mar 5” never become links. Text inside existing links, headings, code blocks and HTML attributes (image alt, src, srcset) is never touched.

Available Bible versions

The list below mirrors the Midvash API catalogue in October 2026 and may grow over time. The plugin’s Settings Midvash Bible References page always shows the current catalogue.

Portuguese — 22: AA ©, ACF ©, ARA ©, ARC ©, AS21 ©, BPT ©, JFAA ©, KJA ©, MSGPT ©, NAA ©, NBV ©, NTLH ©, NVI ©, NVT ©, ALMEIDA-LIVRE, BPM, ONBV, NVA, BLPT, TFT, OL ©, ALM1911
English — 18: KJV, MSG ©, NIV ©, NLT ©, WEB, ASV, YLT, DRA, BBE, GENEVA1599, BSB, LSV, NET ©, DARBY, RV1885, CPDV, WMB, FBV
Spanish — 7: NTV ©, NVIES ©, RVR1909, RVG, SEV, ONBV-ES, PDT
French — 6: LSG, DARBY-FR, MARTIN1744, CRAMPON, FRASBL, NCL
German — 7: LUTH1912, SCHL1951, ELB1905, MEN, LUTH1545, ELB1871, TEXTBIBEL
Italian — 3: DIODATI, RIVEDUTA, DIODATI1885
Russian — 1: SYNODAL
Korean — 1: KOR
Chinese (Simplified and Traditional) — 4: CUV, CUVS, CCB, CCBT

© = version with reserved rights, served to this plugin by the Midvash API (one chapter per reference).

Default version per locale: ONBV (pt-br), BSB (en), RVR1909 (es), LSG (fr), LUTH1912 (de), RIVEDUTA (it), SYNODAL (ru), KOR (ko), CUV (zh).

Beyond the plugin’s nine display locales, the full Midvash API catalogue spans 153 Bible versions in 81 languages — including original-language texts such as the Hebrew Aleppo Codex and WLC, the Greek LXX and SBLGNT, and the Latin Vulgate. As new versions land in the API they appear in the plugin’s settings automatically, no update required.

Source code

Source code and build tools: https://github.com/midvash/bible-wordpress-plugin

The readable JavaScript and CSS ship in the plugin next to the minified copies (assets/js/*.js, assets/css/*.css). The *-<version>.min.js and *-<version>.min.css files are generated from them by scripts/build-zip.ts in the repository (npx tsx scripts/build-zip.ts, which minifies with esbuild). Define SCRIPT_DEBUG to load the readable files.

External services

This plugin relies on the Midvash Bible API (https://api.midvash.com), a service operated by Midvash, to fetch Bible text and the list of available versions. All calls go from your WordPress server (wp_remote_get) over HTTPS; the visitor’s browser only talks to your own site (admin-ajax.php), never to the API. Nothing is sent when the plugin is activated.

Every call carries two headers: User-Agent: Midvash-WP-Plugin/<version> (e.g. Midvash-WP-Plugin/0.10.3) and X-Midvash-Plugin-Key, a key built into the plugin that is the same for every site. It identifies the plugin, not you or your site, and lets the API serve the versions of midvash.com with reserved rights (marked © in Settings).

The calls, what each one sends, and when:

  • Version list — GET /v1/versions. Sends nothing else. When you open Settings Midvash Bible References, when you change the language there, and in a background task when the cached list is missing. Cached for 7 days.
  • Verses of a post — GET /v1/passages. Sends up to 20 references at a time (e.g. “John 3:16”) and the version slug (e.g. “bsb”). Shortly after a visitor opens a post with references. Cached per verse for the configured time (30 days by default).
  • One verse — GET /{version}/{book}/{chapter}/{verses}. Sends the reference and the version slug in the path. When a visitor hovers a reference that is not cached yet, and when a Bible Verse block renders. Same cache.
  • Verse of the day — GET /votd. Sends the language (e.g. “pt-br”) and the version slug. When the Verse of the Day widget or the [mvbr_votd] shortcode renders. Cached for the day.

No personal data is sent: no IP address, no visitor ID, no cookies, no analytics.

  • Service provider. Midvash (https://midvash.com)
  • Terms of Service. https://midvash.com/terms
  • Privacy Policy. https://midvash.com/privacy

If you deactivate the plugin, no further calls are made.

Privacy

This plugin does not collect, store or transmit any visitor data. No cookies are set, no analytics scripts are loaded, no third-party trackers are injected. Verse lookups are anonymous: the upstream API receives only the verse reference being looked up, not who is looking it up. AJAX rate limiting buckets requests by a salted hash of the requester’s IP that lives in the WordPress transient store for 60 seconds and is then discarded — the raw IP is never stored.

Screenshots

Blocks

This plugin provides 1 block.

  • Bible Verse

Installation

  1. Upload the midvash-bible-references folder to /wp-content/plugins/, or install via Plugins Add New search “Midvash Bible References”.
  2. Activate the plugin through the Plugins screen.
  3. (Optional) Go to Settings Midvash Bible References to pick the language, default Bible version, link styling, and whether the word “Bíblia” should be linked too.
  4. Write a post that mentions a verse like John 3:16 — that’s it. Hover the link to see the tooltip.

FAQ

Do I need an API key?

No. The Midvash API is public and read-only. The plugin works out of the box.

Does the tooltip load fast?

Yes. The first fetch for a given verse hits the API; subsequent loads for any visitor read from a local cache (30 days by default, configurable in Settings Cache & Performance). On installs with a persistent object cache (Redis, Memcached) the second hit stays in memory.

Can I insert a specific verse manually instead of relying on auto-detection?

Yes — use the Bible Verse — Midvash Gutenberg block, available in the Text category of the block inserter. You can override the version, the display language, and toggle the reference badge / link per block.

How do I show a daily verse on the sidebar?

Add the Verse of the Day — Midvash widget via Appearance Widgets, or drop [mvbr_votd] anywhere in your content. Both accept locale and version overrides; the daily verse is cached for 24 hours.

Which post types does auto-detection cover?

Single posts and pages (is_singular() true). The Gutenberg block and the VOTD shortcode work everywhere.

How do I change the link colour or underline style?

Settings Midvash Bible References General. Toggle “Enable custom color” and / or “Underline links”, then pick the colour and style.

What languages are supported?

Nine: Portuguese (Brazil), English, Spanish, French, German, Italian, Russian, Korean and Chinese (Simplified). The plugin’s UI strings are translated; book names, abbreviations and URL slugs are also localised in those nine languages.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Midvash Bible References” is open source software. The following people have contributed to this plugin.

Contributors

“Midvash Bible References” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “Midvash Bible References” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.0.2

  • Fixed: “1 Jo 4:8” and similar forms no longer open the Gospel of John. A lone 1, 2 or 3 before a book name is never dropped.
  • Fixed: the Bible Verse block now shows whole chapters, and tooltips no longer number their verses “NaN”.
  • Fixed: more ways of writing a reference become links: “Salmo 23”, “Cantares 2:1”, “I Coríntios 13”, “II Coríntios 5:17”, “2 Co 5:17”, “Primeira João 4:8”, “João 3,16”. Other languages gain common spellings too.
  • Fixed: in single-chapter books a lone number is the verse: “Judas 3”, “3 João 4”.
  • Fixed: “João 3:16,18” now links both verses, each with its own tooltip.
  • New: a range into a later chapter (“João 3:16-4:2”, up to five chapters) is one link, and its tooltip shows the whole passage.
  • Fixed: a name followed by a count is no longer a reference: “Marcos 12 anos”.
  • Fixed: the link color and underline settings now win over the theme (Elementor’s link color used to override them), and follow a custom CSS class.
  • Fixed: a shortcode, block or widget set to another language uses that language’s default version.
  • Fixed: the widget’s “show reference” and “link” boxes can now be turned off.
  • i18n: the block’s editor texts can now be translated.

1.0.1

  • Fixed: the Verse of the Day cache key is now hashed, so a long version in the shortcode can no longer push it past the WordPress transient key limit and break the cache.

1.0.0

  • New name: Midvash Bible References (slug midvash-bible-references), published by Midvash. The plugin files, the text domain and every internal name now use the mvbr prefix.
  • Settings and widgets carry over. On the first load, the settings saved by 0.x and the Verse of the Day widgets are moved to the new names and the old rows are deleted.
  • Changed: the shortcode is now [mvbr_votd] and the block is midvash-bible-references/verse. Posts that used [bbm_votd] or the old block need to be edited once.
  • Safer link styles. Link and underline colours are validated as hex colours, and the underline style against its list, right before the CSS is written.
  • Translations come from translate.wordpress.org. The plugin no longer bundles .po/.mo files.

0.10.3

  • The tooltip stays open on the way to “Read more”. An invisible bridge covers the gap between the reference and the tooltip, and the tooltip waits a moment before hiding, so moving the mouse slowly from the link to the tooltip no longer closes it.
  • No double tooltip. The browser’s own tooltip (the link’s title) no longer opens on top of the verse; its text moves to aria-label for screen readers.
  • Phones and tablets. The first tap on a reference opens the tooltip, a second tap follows the link, and a tap anywhere else closes it.

0.10.2

  • Midvash credits only on request. The logo in the tooltip, the link from the version badge to midvash.com and the “Midvash” credit under the Verse of the Day are now off by default. Turn them on in Settings “Midvash logo in tooltip”.
  • The Verse of the Day widget and shortcode now load the plugin stylesheet.
  • The readme lists every call to the Midvash API, links the source code and explains how the minified files are built.

0.10.1

  • New versions reach visitors behind a cache. The minified script and stylesheet now carry the plugin version in the file name (bbm-tooltip-0.10.1.min.js). Caching plugins that strip ?ver= from asset URLs (such as WP Rocket’s “remove query strings”) left a CDN serving the previous release’s files, so the old tooltip stayed on the site after an update.

0.10.0

  • Every version of midvash.com. The plugin now identifies itself to the Midvash API with a plugin key (sent only from your server), so the Settings list shows the full catalogue, including versions with reserved rights such as NVI or ARA, marked with ©. One chapter per reference, as before.
  • Saved versions are kept. A version saved in Settings, a widget, a block or a shortcode is no longer swapped for a free one when the API serves it. The swap only happens for a version the API does not list.

0.9.2

  • New tooltip look, safe from the theme. The tooltip is isolated from the site’s theme: link colours, fonts and underlines from the theme no longer leak in (before, a theme that paints every link red turned the version badge and “Read more” red). Calmer design in line with midvash.com: light header with the reference and a discreet version badge, the verse in a book serif, a small credit line and “Read more” in the plugin’s Link Color. Dark mode and phones included.
  • Images are safe. References and the word “Bíblia” are only linked in the text of a post, never inside HTML attributes. Before, an image whose src, srcset or alt contained “Bíblia” or a reference got a link injected into the attribute and broke.
  • The word “Bíblia” is linked once per post instead of on every mention.
  • Fewer false links. Only the language chosen in Settings is matched (before, the abbreviations of all nine languages were matched at once). Book names must start with a capital letter, abbreviations must be written exactly and need chapter and verse. “Os 13 apóstolos”, “at 10:30”, “is 5” and “Mar 5” are no longer linked. References are also skipped inside code, pre and script.
  • Chinese and Korean. References written without a space (约翰福音3:16) or followed by a particle (요한복음 3:16에서) are now detected.
  • Translations load. The plugin header had no Domain Path, so WordPress looked for the bundled translations in the wrong folder and the plugin stayed in English on every site.
  • English links keep the verse. Links on English sites pointed at /en/…, which redirects and lost the verse. Links now go straight to the verse anchor.
  • Italian. The default Italian version is now Riveduta; sites still set to NRI, which the API no longer serves, are switched automatically.
  • Tooltip fixes. Fixed the e.target.closest is not a function error, the version badge now links to the version that actually answered, and it shows the version’s short name (“BL” instead of “ALMEIDA-LIVRE”), as does the Bible Verse block.
  • Works with page caches. The public verse endpoints no longer require a nonce, which expired in cached pages and broke every tooltip after a day.
  • No slow pages when the API is down. The page render no longer calls the API: the version attribution comes from the cache, which is refreshed in the background, and a failed refresh waits 15 minutes before trying again.
  • Lighter pages. The tooltip script and stylesheet only load on posts that have a reference (page builders that render other posts as excerpts, like an Elementor posts widget, no longer trigger them), and the release ZIP ships minified copies (the readable sources stay in the ZIP and on GitHub).
  • Removed four settings that did nothing (link version names, book names, dictionary terms and biblical characters).
  • Updated the version catalogue (119 versions in 69 languages; 48 in the plugin’s nine languages) and the plugin site address (https://midvash.com/wordpress-plugin).

0.8.1

  • Openly licensed versions only. The Midvash API no longer distributes all-rights-reserved Bible versions without a licence (e.g. NVT, NVI, ARA, NIV, ESV, NLT, NKJV, NTV). New defaults: ONBV (Open Nova Bíblia Viva) for Portuguese, BSB (Berean Standard Bible) for English and RVR1909 for Spanish.
  • Automatic settings migration. Sites with a retired version saved in Settings are switched to the free version of the same language (e.g. NVT ONBV, ARA Almeida Livre, NIV BSB, NKJV KJV, NTV RVR1909). Widgets, blocks and [bbm_votd] shortcodes that name a retired version are mapped the same way at render time — no edits needed.
  • Attribution with every verse. The tooltip, the Bible Verse block and the Verse of the Day now show the version’s copyright/licence notice returned by the API with the text, in small print below the verse.
  • The Settings version list never offers a retired version, even from a cached catalogue.

0.8.0

  • Instant tooltips (batch prefetch). Shortly after a post renders, the plugin now prefetches every Bible reference on the page in a single request through the Midvash API’s new /v1/passages batch endpoint (up to 60 references per page, 20 per upstream call). Hovering a reference shows the verse instantly instead of waiting for a per-hover round-trip. Hovers that land before the prefetch finishes fall back to the previous per-verse fetch, so nothing ever blocks on it.
  • Localized version names. The Settings version dropdown now shows each Bible version’s name in the site’s display language (e.g. “Bíblia em Inglês Básico” instead of “Bible in Basic English” on a Portuguese site), powered by the enriched /v1/versions catalogue.
  • Copyright attribution in the tooltip. Versions with a copyright notice now display a discreet attribution line in the tooltip footer (full notice on hover) — good practice for licensed translations and a requirement-friendly touch for a future WordPress.org submission.
  • Leaner HTTP client. Removed the defensive 429/X-RateLimit-Reset handling: the API now documents that it serves without rate limits, so the client keeps only transport-error and 5xx retries.

0.7.0

  • WordPress.org readiness. Renames every global PHP symbol from the 3-character bbm_/BBM_ prefix to bbmv_/BBMV_ — WordPress.org requires plugin prefixes of at least 4 characters. Purely internal: stored options, the [bbm_votd] shortcode, AJAX endpoints, CSS classes and asset handles are unchanged, so existing sites update in place with settings intact and nothing to reconfigure.
  • Code quality. The whole codebase now passes PHPCS with the full WordPress Coding Standards ruleset (plus PHPCompatibilityWP for PHP 7.4+) and PHPStan level 5 with the WordPress extension — zero errors, zero warnings. Every function, class and member variable is now fully documented with accurate PHPDoc.
  • Tooling. Adds versioned linter configs (phpcs.xml.dist, phpstan.neon.dist) and a WordPress Playground blueprint that runs the official wordpress.org Plugin Check without Docker. The 0.7.0 wp.org build passes Plugin Check with no errors.

0.6.1

  • Infrastructure. Update and download endpoints moved from wordpress.midvash.com to midvash.app (the plugin now checks midvash.app/api/wordpress/update-info.json). No functional change; existing installs should be updated once to point at the new endpoint.

0.6.0

  • WordPress.org compliance. Drops the explicit load_plugin_textdomain call (WP 4.6+ auto-loads .mo files by slug match and Plugin Check flags it as “discouraged”), wraps every $_POST/$_GET access in wp_unslash() + sanitize_*, validates the admin tab against a whitelist, and moves the inline admin JS into a properly enqueued asset with wp_localize_script. The settings page now passes WordPress Plugin Check with zero errors.
  • Security. Adds manage_options capability check to the admin-only bbm_get_versions AJAX endpoint, adds a per-IP rate limit (120 verse lookups / minute) on the public bbm_get_verse endpoint, switches wp_remote_get to reject_unsafe_urls and limit_response_size to harden against SSRF and oversized payloads.
  • Performance. Memoises the regex matching pattern and lookup table per request (one build vs N) — material gain on archive pages and themes that render multiple post bodies. Reads now go object-cache transient API (was transient API). Retry budget on the synchronous request path cut from 3× / 4 s backoff to 2× / 1 s, eliminating PHP-FPM timeouts when the upstream is slow.
  • Robustness. Centralised reference parsing in BBM_Books::parse_reference() — the parser, the API client and the Gutenberg block now share one implementation, one accent-tolerance pass and one chapter-range check.
  • i18n. Front-end tooltip strings now flow through __() + the bundled .mo files instead of a hardcoded 9-locale lookup, so new locales come for free as .po files land. Adds an mb_strtolower fallback for shared hosts without the mbstring extension.
  • Cleanup. Adds uninstall.php to remove plugin options and transients on deletion. Stops wiping the cache on deactivation (was punishing users who deactivate to debug). Removes dead BBM_API::get_books() and BBM_API::clear_cache() methods.
  • Catalogue. README updated with the live list of Bible versions per locale (now 53 across 9 languages), including the new pt-br versions BPM, ONBV, NVA, BLPT, TFT, the new Spanish RVR1909 and RVG, the new French CRAMPON and FRASBL, and the new German MEN and LUTH1545.

0.5.0

  • Added Gutenberg block Bible Verse — Midvash (category: Text). Authors can insert any Bible reference directly into the block editor; the verse is fetched and rendered server-side by PHP on each page load. Supports all 9 locales, version and language overrides per-block, show/hide reference, and optional link to Midvash. Schema.org Quotation microdata included in output. No build step required.

0.4.0

  • Added Verse of the Day widget and [bbm_votd] shortcode powered by the Midvash API. Place the widget in any sidebar or use [bbm_votd] anywhere in your content. Supports all 9 locales, per-widget language and version overrides, and caches the daily verse for 24 hours.

0.3.0

  • Added Schema.org Quotation microdata to all auto-detected Bible reference links. Search engines can now parse every verse reference as structured data, improving rich-result eligibility for sites using the plugin.

0.2.1

  • The plugin brand name “Bible by Midvash” is now translated in the admin menu and settings page header — appears as “Bíblia by Midvash” (Portuguese), “Biblia by Midvash” (Spanish), “Bibel by Midvash” (German), “Bibbia by Midvash” (Italian), “Библия by Midvash” (Russian), “성경 by Midvash” (Korean), “圣经 by Midvash” (Chinese), keeping “Midvash” as the brand.

0.2.0

  • Added full support for 6 new content locales: French, German, Italian, Russian, Korean, and Chinese (Simplified). All 9 locales (pt-br, en, es, fr, de, it, ru, ko, zh) now have working book detection, localized URLs, and matching Bible versions.
  • Book data is now generated from the Midvash API via scripts/sync-books.ts, eliminating ~500 lines of hardcoded data.

0.1.0

  • Added translations for 9 locales: Portuguese (Brazil), English, Spanish, French, German, Italian, Russian, and Chinese (Simplified).
  • Refreshed .pot template to match the current source strings.

0.0.1

  • Initial release of Bible by Midvash.
  • Auto-detects Bible references in posts and pages, transforming them into links with verse tooltips on hover.
  • 35+ Bible versions across Portuguese, English and Spanish.
  • Customizable link styling (color, underline style, open in new tab).
  • 30-day verse cache for tooltip performance.
  • Powered by the public Midvash API at api.midvash.com.
  • Distributed via https://midvash.com/wordpress-plugin.