{"id":350644,"date":"2026-09-01T00:53:47","date_gmt":"2026-09-01T00:53:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/estudobiblico-biblia-digital\/"},"modified":"2026-10-25T12:16:27","modified_gmt":"2026-10-25T12:16:27","slug":"estudobiblico-biblia-digital","status":"publish","type":"plugin","link":"https:\/\/me.wordpress.org\/plugins\/estudobiblico-biblia-digital\/","author":21024476,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.3","stable_tag":"1.2.3","tested":"7.1.3","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"EstudoBiblico B\u00edblia Digital","header_author":"Claudio Crispim","header_description":"Disponibiliza leitura, pesquisa, navega\u00e7\u00e3o e recursos b\u00edblicos no WordPress.","assets_banners_color":"314365","last_updated":"2026-10-25 12:16:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/estudobiblico.org\/biblia-sagrada-online\/","header_author_uri":"https:\/\/estudobiblico.org\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":338,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.70":{"tag":"1.1.70","author":"crispaorg","date":"2026-09-01 00:53:30","revision":3675117},"1.2.0":{"tag":"1.2.0","author":"crispaorg","date":"2026-09-20 02:33:04","revision":3703789},"1.2.2":{"tag":"1.2.2","author":"crispaorg","date":"2026-09-20 16:22:19","revision":3704426},"1.2.3":{"tag":"1.2.3","author":"crispaorg","date":"2026-10-25 12:16:27","revision":3764502}},"upgrade_notice":{"1.2.3":"<p>Fixes link previews for Bible pages: sharing a chapter showed the title, description and image of an unrelated article.<\/p>","1.2.2":"<p>Cache fixes for Bible content changes: importing a Bible or switching the active Bible now purges the Bible pages, 404 routes are purgeable, and the per-version tag matches the version the page shows.<\/p>","1.2.1":"<p>Bible pages get their own LiteSpeed Cache tag, so publishing a post no longer purges every Bible URL. The plugin&#039;s own purges now clear only the Bible pages instead of the whole site cache.<\/p>","1.2.0":"<p>The source language is now English; other languages come from translate.wordpress.org. Uploaded custom translations are converted automatically. Portuguese sites without a pt_BR language pack: upload a pt_BR translation before updating.<\/p>","1.1.70":"<p>New public name and slug. The Bible URLs, shortcodes and stored options are unchanged. Custom translation files uploaded by the administrator move to the uploads directory automatically; the previous copies are kept and still read.<\/p>","1.1.65":"<p>Removes the automatic card that narrowed the verses and adds a compact chapter selector at the top of the reader.<\/p>","1.1.64":"<p>Fixes the display of the chapter side card, adds a real sidebar widget, and adjusts the Aa panel on mobile.<\/p>","1.1.51":"<p>Fixes Plugin Check findings, revises rewrite\/query vars, improves legacy URL compatibility, and keeps permalink flushing controlled.<\/p>","1.1.50":"<p>Adds an organized admin panel with enterprise-style tabs and documents all shortcodes and attributes in the admin panel and readme.txt.<\/p>","1.1.49":"<p>Keeps the functional translation selector below the book lists and improves dropdown stacking.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3747351,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3747351,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3747351,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3747351,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"biblia-digital\/search":{"apiVersion":3,"name":"biblia-digital\/search","title":"B\u00edblia Digital - Search","category":"widgets","icon":"search","description":"Displays the B\u00edblia Digital search form using the site's active Bible.","textdomain":"estudobiblico-biblia-digital","editorScript":"file:.\/index.js","attributes":{"title":{"type":"string"},"placeholder":{"type":"string"},"button":{"type":"string"},"showBook":{"type":"boolean","default":true}},"supports":{"html":false}}},"tagged_versions":["1.1.70","1.2.0","1.2.2","1.2.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3739791,"resolution":"1","location":"assets","locale":"","width":1280,"height":854},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3739791,"resolution":"2","location":"assets","locale":"","width":1280,"height":676},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3739791,"resolution":"3","location":"assets","locale":"","width":1280,"height":698},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3739791,"resolution":"4","location":"assets","locale":"","width":1280,"height":594},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3739791,"resolution":"5","location":"assets","locale":"","width":1280,"height":889},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3739791,"resolution":"6","location":"assets","locale":"","width":1280,"height":620},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3739791,"resolution":"7","location":"assets","locale":"","width":1280,"height":863}},"screenshots":{"1":"Chapter reader with the reading options panel: font size, verse-by-verse or continuous layout, reading font and background.","2":"Bible home with the books of the Old and New Testament, quick access cards and the active translation.","3":"Search results across the whole Bible, with the matched words highlighted and a share button on each verse.","4":"Chapter selector for a book, with the active translation shown.","5":"Admin: Import Bible tab, with the ZIP\/CSV upload and ready-made books.csv and verses.csv templates.","6":"Admin: Bible Versions tab, where the active Bible is chosen and imported versions are reviewed or deleted.","7":"Admin: Shortcodes tab, with examples, attributes and copy buttons."}},"plugin_section":[],"plugin_tags":[12198,148076,12285,944,80],"plugin_category":[43],"plugin_contributors":[278556],"plugin_business_model":[],"class_list":["post-350644","plugin","type-plugin","status-publish","hentry","plugin_tags-bible","plugin_tags-gutenberg","plugin_tags-scripture","plugin_tags-search","plugin_tags-shortcode","plugin_category-customization","plugin_contributors-crispaorg","plugin_committers-crispaorg"],"banners":{"banner":"https:\/\/ps.w.org\/estudobiblico-biblia-digital\/assets\/banner-772x250.png?rev=3747351","banner_2x":"https:\/\/ps.w.org\/estudobiblico-biblia-digital\/assets\/banner-1544x500.png?rev=3747351","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/estudobiblico-biblia-digital\/assets\/icon-128x128.png?rev=3747351","icon_2x":"https:\/\/ps.w.org\/estudobiblico-biblia-digital\/assets\/icon-256x256.png?rev=3747351","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/estudobiblico-biblia-digital\/assets\/screenshot-1.png?rev=3739791","caption":"Chapter reader with the reading options panel: font size, verse-by-verse or continuous layout, reading font and background."},{"src":"https:\/\/ps.w.org\/estudobiblico-biblia-digital\/assets\/screenshot-2.png?rev=3739791","caption":"Bible home with the books of the Old and New Testament, quick access cards and the active translation."},{"src":"https:\/\/ps.w.org\/estudobiblico-biblia-digital\/assets\/screenshot-3.png?rev=3739791","caption":"Search results across the whole Bible, with the matched words highlighted and a share button on each verse."},{"src":"https:\/\/ps.w.org\/estudobiblico-biblia-digital\/assets\/screenshot-4.png?rev=3739791","caption":"Chapter selector for a book, with the active translation shown."},{"src":"https:\/\/ps.w.org\/estudobiblico-biblia-digital\/assets\/screenshot-5.png?rev=3739791","caption":"Admin: Import Bible tab, with the ZIP\/CSV upload and ready-made books.csv and verses.csv templates."},{"src":"https:\/\/ps.w.org\/estudobiblico-biblia-digital\/assets\/screenshot-6.png?rev=3739791","caption":"Admin: Bible Versions tab, where the active Bible is chosen and imported versions are reviewed or deleted."},{"src":"https:\/\/ps.w.org\/estudobiblico-biblia-digital\/assets\/screenshot-7.png?rev=3739791","caption":"Admin: Shortcodes tab, with examples, attributes and copy buttons."}],"raw_content":"<!--section=description-->\n<p>EstudoBiblico B\u00edblia Digital lets site administrators publish locally stored Bible content in WordPress using plugin-owned database tables, friendly URLs, shortcodes, widgets, and a search block.<\/p>\n\n<p>This public package does not include copyrighted Bible texts, SQL dumps, or proprietary translations. The site administrator imports licensed Bible data with a ZIP file that contains <code>books.csv<\/code> and <code>verses.csv<\/code>.<\/p>\n\n<p><strong>Live demo:<\/strong> the plugin runs the Bible section of <a href=\"https:\/\/estudobiblico.org\/biblia-sagrada-online\/\">estudobiblico.org<\/a>, in <a href=\"https:\/\/estudobiblico.org\/en\/holy-bible\/\">English<\/a> and <a href=\"https:\/\/estudobiblico.org\/es\/santa-biblia-digital\/\">Spanish<\/a> as well, with the reader, the search and the version switcher working on real content.<\/p>\n\n<p>Main features:<\/p>\n\n<ul>\n<li>Frontend Bible reader by book, chapter, and verse.<\/li>\n<li>Search by word, phrase, exact phrase, any word, or all words.<\/li>\n<li>Friendly URLs for books, chapters, verses, and version-aware paths.<\/li>\n<li>Backward compatibility with older query-string URLs.<\/li>\n<li>SEO metadata, canonical URL support, and local manifest endpoint.<\/li>\n<li>Gutenberg search block.<\/li>\n<li>Search widget and random verse widget.<\/li>\n<li>Shortcodes for the reader, search, random verses, specific verses, and chapters.<\/li>\n<li>Multisite-compatible structure.<\/li>\n<li>Multiple Bible versions\/translations per site.<\/li>\n<li>Optional upload of <code>.pot<\/code>, <code>.po<\/code>, and <code>.mo<\/code> files for plugin interface translation.<\/li>\n<li>Admin tabs for overview, import, versions, frontend translation, shortcodes, SEO and URLs, and diagnostics.<\/li>\n<li>No required calls to external APIs.<\/li>\n<\/ul>\n\n<h3>Bible Data License<\/h3>\n\n<p>This plugin does not distribute Bible text. The site administrator is responsible for confirming that every imported translation is public domain, properly licensed, or used with permission from the rights holder.<\/p>\n\n<h3>Import Format<\/h3>\n\n<p>Bible text is imported from a ZIP file containing two CSV files: <code>books.csv<\/code> and <code>verses.csv<\/code>. Ready-made templates can be downloaded from Settings &gt; B\u00edblia Digital &gt; Import.<\/p>\n\n<h4>books.csv<\/h4>\n\n<p>The first line is the header. Then one book per line, all 66 books, numbered 1 (Genesis) to 66 (Revelation) in the traditional Protestant order.<\/p>\n\n<pre><code>livro_seq,livro,livro_desc\n1,Gn,Genesis\n2,Ex,Exodus\n...\n66,Rev,Revelation\n<\/code><\/pre>\n\n<ul>\n<li><code>livro_seq<\/code>: book number, 1 to 66.<\/li>\n<li><code>livro<\/code>: short abbreviation.<\/li>\n<li><code>livro_desc<\/code>: book name. It is shown on the site and also becomes the book URL (<code>Colossians<\/code> \u2192 <code>\/colossians\/<\/code>). Review the spelling before importing: changing it later changes the URL.<\/li>\n<\/ul>\n\n<p>The import stops with a message listing the missing book numbers if any of the 66 is absent. Deuterocanonical books are not supported.<\/p>\n\n<h4>verses.csv<\/h4>\n\n<p>The first line is the header. Then one verse per line.<\/p>\n\n<pre><code>testamento,livroseq,livro,capitulo,versiculo,palavra\nOT,1,Gen,1,1,\"Text of Genesis 1:1.\"\nNT,43,John,3,16,\"Text with commas, and \"\"doubled\"\" quotes.\"\n<\/code><\/pre>\n\n<ul>\n<li><code>testamento<\/code>: OT\/NT, AT\/NT or empty. It is inferred from the book number.<\/li>\n<li><code>livroseq<\/code>, <code>capitulo<\/code>, <code>versiculo<\/code>: book, chapter and verse numbers.<\/li>\n<li><code>livro<\/code>: abbreviation (optional content, required column).<\/li>\n<li><code>palavra<\/code>: plain verse text, up to 5,000 characters. HTML is removed.<\/li>\n<\/ul>\n\n<p>Put the verse text in double quotes. Quotes inside the text are written doubled (<code>\"\"<\/code>). Line breaks inside a quoted text are accepted.<\/p>\n\n<h4>Saving and packaging<\/h4>\n\n<ul>\n<li>Encoding: UTF-8. In Excel, use \"CSV UTF-8 (Comma delimited)\". In LibreOffice, choose the Unicode (UTF-8) character set, comma separator and double quote as text delimiter. Files in another encoding are rejected with the line number.<\/li>\n<li>Separator: comma is recommended. Semicolon is also accepted; the separator is detected once, from the header line.<\/li>\n<li>ZIP: the two CSV files may be at the root of the ZIP or inside a single folder. System files added by macOS and Windows (<code>__MACOSX\/<\/code>, <code>.DS_Store<\/code>, <code>Thumbs.db<\/code>) are ignored.<\/li>\n<li>Limits: ZIP up to 50 MB and up to 25 MB extracted. The PHP zip extension is required.<\/li>\n<li>Language: use a code such as <code>pt-BR<\/code>, <code>en-US<\/code> or <code>es-ES<\/code>.<\/li>\n<\/ul>\n\n<h4>Importing again and deleting versions<\/h4>\n\n<p>Each import creates a new Bible version and makes it active. To replace a translation, import the new file and then delete the old version in Settings &gt; B\u00edblia Digital &gt; Versions.<\/p>\n\n<p>Deleting a version removes its record, books and verses, and cannot be undone. The active Bible cannot be deleted directly: activate another version first. URLs of a deleted version redirect (301) to the same book, chapter and verse in the active Bible.<\/p>\n\n<h3>Shortcodes<\/h3>\n\n<p>All shortcodes are also documented inside the plugin admin area under Settings &gt; Biblia Digital &gt; Shortcodes.<\/p>\n\n<h4>Main Bible Reader<\/h4>\n\n<p>Shortcode:<\/p>\n\n<pre><code>[biblia-digital]\n<\/code><\/pre>\n\n<p>Compatibility aliases:<\/p>\n\n<ul>\n<li><code>[biblia-wp-estudobiblico]<\/code><\/li>\n<li><code>[bibliawp-estudobiblico]<\/code><\/li>\n<\/ul>\n\n<p>Description: displays the full Bible reader, including landing area, books, chapters, verses, search, breadcrumbs, and navigation.<\/p>\n\n<p>Examples:<\/p>\n\n<pre><code>[biblia-digital]\n[biblia-digital version=\"1\"]\n[biblia-digital per_page=\"30\" title=\"Bible Reader\" version=\"1\"]\n<\/code><\/pre>\n\n<p>Attributes:<\/p>\n\n<ul>\n<li><code>per_page<\/code>: number of items per page when pagination is used. Default: 30.<\/li>\n<li><code>title<\/code>: optional title displayed by the shortcode when applicable.<\/li>\n<li><code>version<\/code>: Bible version ID. Example: <code>version=\"1\"<\/code>.<\/li>\n<\/ul>\n\n<h4>Simple Bible Search<\/h4>\n\n<p>Shortcode:<\/p>\n\n<pre><code>[biblia-busca]\n<\/code><\/pre>\n\n<p>Alias:<\/p>\n\n<ul>\n<li><code>[estudo_biblico_busca]<\/code><\/li>\n<\/ul>\n\n<p>Description: displays only the Bible search form.<\/p>\n\n<p>Examples:<\/p>\n\n<pre><code>[biblia-busca]\n[biblia-busca title=\"Search the Bible\" placeholder=\"Type a word or phrase\" button=\"Search\"]\n<\/code><\/pre>\n\n<p>Attributes:<\/p>\n\n<ul>\n<li><code>title<\/code>: search form title.<\/li>\n<li><code>placeholder<\/code>: placeholder text for the search field.<\/li>\n<li><code>button<\/code>: submit button text.<\/li>\n<li><code>version<\/code>: Bible version ID, when applicable.<\/li>\n<\/ul>\n\n<h4>Full Search Page<\/h4>\n\n<p>Shortcode:<\/p>\n\n<pre><code>[biblia-busca-pagina]\n<\/code><\/pre>\n\n<p>Alias:<\/p>\n\n<ul>\n<li><code>[biblia-digital-busca]<\/code><\/li>\n<\/ul>\n\n<p>Description: displays the search form, results, and pagination. This shortcode is recommended for a public search page.<\/p>\n\n<p>Examples:<\/p>\n\n<pre><code>[biblia-busca-pagina]\n[biblia-busca-pagina title=\"Search the Bible\" per_page=\"30\" show_book=\"1\"]\n<\/code><\/pre>\n\n<p>Attributes:<\/p>\n\n<ul>\n<li><code>title<\/code>: search page or block title.<\/li>\n<li><code>per_page<\/code>: number of results per page. Suggested default: 30.<\/li>\n<li><code>show_book<\/code>: show the book selector. Accepts <code>1<\/code> or <code>0<\/code>.<\/li>\n<li><code>version<\/code>: Bible version ID, when applicable.<\/li>\n<\/ul>\n\n<h4>Random Verse<\/h4>\n\n<p>Shortcode:<\/p>\n\n<pre><code>[biblia-versiculo-aleatorio]\n<\/code><\/pre>\n\n<p>Description: displays a random Bible verse.<\/p>\n\n<p>Examples:<\/p>\n\n<pre><code>[biblia-versiculo-aleatorio]\n[biblia-versiculo-aleatorio book=\"19\"]\n[biblia-versiculo-aleatorio title=\"Verse of the Moment\" book=\"19\" show_button=\"1\" button_text=\"Read chapter\"]\n<\/code><\/pre>\n\n<p>Attributes:<\/p>\n\n<ul>\n<li><code>title<\/code>: block title.<\/li>\n<li><code>book<\/code>: book ID or book identifier. Example: <code>book=\"19\"<\/code> for Psalms.<\/li>\n<li><code>version<\/code>: Bible version ID.<\/li>\n<li><code>show_reference<\/code>: show the Bible reference. Accepts <code>1<\/code> or <code>0<\/code>.<\/li>\n<li><code>link_reference<\/code>: link the reference to the reader. Accepts <code>1<\/code> or <code>0<\/code>.<\/li>\n<li><code>show_button<\/code>: show a chapter button. Accepts <code>1<\/code> or <code>0<\/code>.<\/li>\n<li><code>button_text<\/code>: button label.<\/li>\n<\/ul>\n\n<h4>Specific or Random Verse<\/h4>\n\n<p>Shortcode:<\/p>\n\n<pre><code>[biblia-versiculo]\n<\/code><\/pre>\n\n<p>Description: displays one specific verse or a random verse.<\/p>\n\n<p>Examples:<\/p>\n\n<pre><code>[biblia-versiculo livro=\"john\" capitulo=\"3\" versiculo=\"16\"]\n[biblia-versiculo book=\"43\" chapter=\"3\" verse=\"16\"]\n[biblia-versiculo livro=\"random\" capitulo=\"random\" versiculo=\"random\"]\n[biblia-versiculo livro=\"psalms\" capitulo=\"23\" versiculo=\"random\"]\n<\/code><\/pre>\n\n<p>Attributes:<\/p>\n\n<ul>\n<li><code>title<\/code>: optional title.<\/li>\n<li><code>livro<\/code>: book name, abbreviation, or ID.<\/li>\n<li><code>book<\/code>: English alias for <code>livro<\/code>.<\/li>\n<li><code>capitulo<\/code>: chapter number or <code>random<\/code>.<\/li>\n<li><code>chapter<\/code>: English alias for <code>capitulo<\/code>.<\/li>\n<li><code>versiculo<\/code>: verse number or <code>random<\/code>.<\/li>\n<li><code>verse<\/code>: English alias for <code>versiculo<\/code>.<\/li>\n<li><code>version<\/code>: Bible version ID.<\/li>\n<li><code>show_reference<\/code>: show the reference. Accepts <code>1<\/code> or <code>0<\/code>.<\/li>\n<li><code>link_reference<\/code>: link the reference to the reader. Accepts <code>1<\/code> or <code>0<\/code>.<\/li>\n<li><code>show_button<\/code>: show a button. Accepts <code>1<\/code> or <code>0<\/code>.<\/li>\n<li><code>button_text<\/code>: button label.<\/li>\n<\/ul>\n\n<p>Accepted random values:<\/p>\n\n<ul>\n<li><code>random<\/code><\/li>\n<li><code>aleatorio<\/code><\/li>\n<li><code>aleat\u00f3rio<\/code><\/li>\n<li><code>rand<\/code><\/li>\n<li><code>*<\/code><\/li>\n<\/ul>\n\n<h4>Specific or Random Chapter<\/h4>\n\n<p>Shortcode:<\/p>\n\n<pre><code>[biblia-capitulo]\n<\/code><\/pre>\n\n<p>Description: displays a specific chapter or a random chapter.<\/p>\n\n<p>Examples:<\/p>\n\n<pre><code>[biblia-capitulo random=\"1\" limite=\"15\"]\n[biblia-capitulo livro=\"john\" capitulo=\"3\"]\n[biblia-capitulo livro=\"43\" capitulo=\"3\"]\n<\/code><\/pre>\n\n<p>Attributes:<\/p>\n\n<ul>\n<li><code>title<\/code>: optional title.<\/li>\n<li><code>livro<\/code>: book name, abbreviation, or ID.<\/li>\n<li><code>book<\/code>: English alias for <code>livro<\/code>.<\/li>\n<li><code>capitulo<\/code>: chapter number.<\/li>\n<li><code>chapter<\/code>: English alias for <code>capitulo<\/code>.<\/li>\n<li><code>random<\/code>: enable random chapter mode. Accepts <code>1<\/code> or <code>0<\/code>.<\/li>\n<li><code>limite<\/code>: limit the number of displayed verses.<\/li>\n<li><code>limit<\/code>: English alias for <code>limite<\/code>.<\/li>\n<li><code>version<\/code>: Bible version ID.<\/li>\n<li><code>show_title<\/code>: show the chapter title. Accepts <code>1<\/code> or <code>0<\/code>.<\/li>\n<li><code>show_button<\/code>: show a button to open the full chapter. Accepts <code>1<\/code> or <code>0<\/code>.<\/li>\n<li><code>button_text<\/code>: button label.<\/li>\n<\/ul>\n\n<h3>Friendly URLs<\/h3>\n\n<p>Biblia Digital supports friendly URLs and keeps compatibility with older query-string URLs.<\/p>\n\n<p>Version-aware URL example:<\/p>\n\n<pre><code>\/biblia-digital\/versao\/acf-pt-br\/john\/3\/16\/\n<\/code><\/pre>\n\n<p>Legacy URL example:<\/p>\n\n<pre><code>\/biblia-digital\/john\/3\/16\/?bdwp_bible_id=1\n<\/code><\/pre>\n\n<p>After changing the Bible URL base in the plugin settings, go to Settings &gt; Permalinks and click Save Changes once.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Biblia Digital does not collect personal data, track visitors, or require calls to external APIs. Imported Bible content is stored locally in the WordPress database.<\/p>\n\n<h3>License<\/h3>\n\n<p>This plugin is licensed under GPLv2 or later. Imported Bible data must be public domain, properly licensed, or used with permission from the rights holder.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP file from the WordPress admin panel.<\/li>\n<li>Activate EstudoBiblico B\u00edblia Digital.<\/li>\n<li>Go to Settings &gt; Biblia Digital.<\/li>\n<li>Open the Import Bible tab.<\/li>\n<li>Import a ZIP file containing <code>books.csv<\/code> and <code>verses.csv<\/code>.<\/li>\n<li>Confirm that you have the right to use the imported Bible translation.<\/li>\n<li>Create a public Bible page.<\/li>\n<li>Insert the <code>[biblia-digital]<\/code> shortcode.<\/li>\n<li>If friendly URLs return 404, go to Settings &gt; Permalinks and click Save Changes once.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20include%20bible%20text%3F\"><h3>Does the plugin include Bible text?<\/h3><\/dt>\n<dd><p>No. The public package does not include Bible text. You must import a properly licensed Bible data package.<\/p><\/dd>\n<dt id=\"why%20is%20import%20not%20automatic%20on%20activation%3F\"><h3>Why is import not automatic on activation?<\/h3><\/dt>\n<dd><p>Activation creates tables and default options. Bible text import can be heavy, so it is handled from the admin panel.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20multisite%3F\"><h3>Does the plugin support multisite?<\/h3><\/dt>\n<dd><p>Yes. Each site uses its own tables and options.<\/p><\/dd>\n<dt id=\"can%20i%20use%20different%20languages%20or%20translations%3F\"><h3>Can I use different languages or translations?<\/h3><\/dt>\n<dd><p>Yes. Each imported version can have its own label and language code. The active Bible is configured per site, while public visitors can choose another available version when more than one public version exists.<\/p><\/dd>\n<dt id=\"where%20can%20i%20find%20the%20shortcodes%3F\"><h3>Where can I find the shortcodes?<\/h3><\/dt>\n<dd><p>Go to Settings &gt; Biblia Digital &gt; Shortcodes. The tab includes examples, attributes, and copy buttons.<\/p><\/dd>\n<dt id=\"does%20frontend%20translation%20replace%20the%20bible%20text%3F\"><h3>Does frontend translation replace the Bible text?<\/h3><\/dt>\n<dd><p>No. <code>.pot<\/code>, <code>.po<\/code>, and <code>.mo<\/code> files translate only the plugin interface strings. Bible text comes from imported CSV files.<\/p><\/dd>\n<dt id=\"how%20is%20the%20plugin%20interface%20translated%3F\"><h3>How is the plugin interface translated?<\/h3><\/dt>\n<dd><p>The plugin is written in English. Other languages come from translate.wordpress.org as language packs, which WordPress installs automatically. You can also upload your own <code>.po<\/code> and <code>.mo<\/code> files in Settings &gt; B\u00edblia Digital &gt; Frontend Translation. An uploaded translation takes priority, and the language pack fills in any strings it does not cover.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20collect%20visitor%20data%3F\"><h3>Does the plugin collect visitor data?<\/h3><\/dt>\n<dd><p>No. Reading and search are processed locally in WordPress. The plugin does not create tracking cookies or send visitor data to third parties.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Social previews of Bible pages were wrong. These pages are not posts, so an SEO plugin cannot resolve a title or an image for them: Rank Math left <code>og:title<\/code> out entirely and filled the description and the image from an unrelated article. Sharing a chapter on WhatsApp or Facebook showed another post's text and picture.<\/li>\n<li>The plugin now hands the correct values to Rank Math and Yoast through their Open Graph and Twitter filters: the chapter title, the first verse as the description, the canonical URL, and the image set in Settings &gt; B\u00edblia Digital, falling back to the site icon.<\/li>\n<li>When no SEO plugin handles Open Graph, the plugin prints the tags itself, the same way it already does for the canonical. Filters: <code>bdwp70_print_opengraph<\/code> and <code>bdwp70_social_image<\/code>.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>The per-version cache tag now reflects the version the page actually shows. It was assigned before the request state was resolved, so a URL with \/versao\/\/ or a <code>version<\/code> shortcode attribute was tagged with the site's active Bible instead, and a purge for one version would have missed those pages.<\/li>\n<li>Bible routes that answer 404 also carry the Bible cache tag. Without it, a URL that starts to exist after an import would keep answering 404 until the server's error page TTL expired.<\/li>\n<li>Switching the site's active Bible now purges the Bible pages. Until now the cached pages kept serving the previous translation until their TTL ran out.<\/li>\n<li>Importing a Bible purges the Bible pages as well. The imported version becomes the active one, so every cached Bible page was out of date.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Bible pages get their own LiteSpeed Cache tag (<code>bdwp70_bible<\/code>). Until now the virtual pages only carried the tags LiteSpeed derives from the query: the page that hosts the shortcode, the blog home, and \"pages\". Every Bible URL shared those tags, so publishing or updating any post purged all of them at once, and the server had to render tens of thousands of pages again.<\/li>\n<li>The virtual query no longer reports itself as the blog home (<code>is_home<\/code>), which is where the home cache tag came from.<\/li>\n<li>The plugin's own purges (book name corrections, deleting a version) now purge only the Bible tag instead of the whole site cache. The <code>bdwp70_purge_all_caches<\/code> filter restores the previous site-wide purge.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>The plugin's source strings are now in English, as translate.wordpress.org expects. Until now they were in Portuguese: translators had no English original to start from, and sites in English could never get an English interface, since en_US has no translation project.<\/li>\n<li>Interface text that was hardcoded in Portuguese is now translatable English: import and upload error messages, the translation upload form, the search pagination label, the media picker, the Bible version labels, and the search engine titles and descriptions.<\/li>\n<li>Custom translation files uploaded before this version use the old Portuguese keys. On update they are converted once to the new English keys, and any file uploaded later with the old keys is converted on upload. The conversion map ships only hashes of the old keys, not translated text.<\/li>\n<li>When a custom translation is loaded, the translate.wordpress.org language pack for the same locale is loaded after it, filling in any strings the custom file does not cover.<\/li>\n<li>A notice on the plugin screens explains when the site's language has neither a language pack nor a custom translation.<\/li>\n<li>Reading options: the font size label (\"Small\", \"Medium\", \"Large\") was rewritten by frontend.js with fixed Portuguese text after each change. It now uses the translated labels rendered by PHP.<\/li>\n<li>Shortcode examples in the admin panel use the English attribute aliases (<code>book<\/code>, <code>chapter<\/code>, <code>verse<\/code>, <code>limit<\/code>) and English sample values. The Portuguese attribute names keep working.<\/li>\n<li>CSV examples in the import instructions use English sample data.<\/li>\n<li>The changelog and upgrade notices in this readme are now in English.<\/li>\n<\/ul>\n\n<h4>1.1.80<\/h4>\n\n<ul>\n<li>Public Bible pages no longer send <code>nocache_headers()<\/code>. A chapter's HTML is the same for every anonymous visitor, and no-cache on every virtual page defeated page caching, proxies and CDNs on the most visited URLs. No-cache is still sent to logged-in users; the <code>bdwp70_bible_page_nocache<\/code> filter adjusts the rule.<\/li>\n<li>Book, chapter and verse are validated before responding with 200. The rewrite rules accept any number, so \/romans\/3\/999\/ and \/romans\/999\/1\/ used to respond 200 with the nearest chapter, a soft 404 that multiplied the crawlable URL space. They now respond 404 and the theme renders its own error page. The 301 redirects for removed versions and old slugs still run before the validation, so no URL that used to redirect starts returning 404. Adjustable with the <code>bdwp70_bible_route_not_found<\/code> filter.<\/li>\n<li>manifest.json, requested by every browser that loads a Bible page, no longer sends no-cache either.<\/li>\n<li>On a 404 response the plugin no longer outputs a title, description or canonical for the missing passage.<\/li>\n<li>Canonical: the plugin prints its own only when no SEO plugin produced one for the page, avoiding two tags in the head. Detection relies on the SEO plugin's own filter running (Rank Math, Yoast, AIOSEO, SEOPress), not on the plugin merely being active: on these virtual pages, which are not posts, Rank Math emits no canonical, and suppressing ours based on presence would leave the page without one. Filter: <code>bdwp70_print_canonical<\/code>.<\/li>\n<li>Search block: text domain fixed from <code>biblia-digital<\/code> to <code>estudobiblico-biblia-digital<\/code> in block.json and index.js. The 1.1.70 domain migration had missed the block, so its strings were neither translatable nor in the .pot.<\/li>\n<li>Search block: title, placeholder and button no longer have fixed English defaults in block.json. WordPress applies those defaults before the render callback, so a block inserted without changes showed \"Search the Bible\" on the site; it now uses the same translatable text as the widget. Blocks with custom text are unchanged.<\/li>\n<li>.pot regenerated. The 1.1.70 file had been generated before the activation notice was added and lacked its four strings.<\/li>\n<li>get_single_verse() memoizes its result per request: route validation and the meta description were asking for the same verse twice.<\/li>\n<li>Coding standards fixes, and the book name correction query now uses <code>$wpdb-&gt;prepare()<\/code> with <code>%i<\/code>.<\/li>\n<\/ul>\n\n<h4>1.1.79<\/h4>\n\n<ul>\n<li>Import: the CSV separator is detected once, from the header. It used to be decided line by line, and a verse with many commas in a semicolon-separated file (a genealogy, for example) aborted the import.<\/li>\n<li>Import: reading uses fgetcsv(), which accepts line breaks inside quoted text.<\/li>\n<li>Import: files that are not UTF-8 (the usual Excel \"CSV\" in Windows-1252) are rejected with the line number, instead of silently losing accented characters.<\/li>\n<li>Import: specific messages for a missing header, an invalid header, an empty file and missing books. An incomplete books.csv reports how many book numbers are missing and which ones.<\/li>\n<li>ZIP: books.csv and verses.csv can be at the root or inside a single folder, as produced by \"Compress folder\" on Windows and macOS. System entries (__MACOSX\/, ._file, .DS_Store, Thumbs.db, desktop.ini) are ignored. An unexpected or duplicated file is reported by name.<\/li>\n<li>Import instructions rewritten in the admin panel and in this readme, with a step-by-step guide, header examples, quoting, Excel and LibreOffice encoding settings, and the effect of livro_desc on the URL. Downloadable books.csv (66 books) and verses.csv (examples) templates.<\/li>\n<li>Versions: new option to delete an imported version on the Versions tab, with a required confirmation. It removes the record, books and verses. The active Bible cannot be deleted directly. Deleting clears the keyed caches (object cache included) and asks LiteSpeed Cache to purge.<\/li>\n<li>URLs of a deleted version respond with a 301 to the same book, chapter and verse in the active Bible.<\/li>\n<\/ul>\n\n<h4>1.1.78<\/h4>\n\n<ul>\n<li>Book names are fixed natively, without a separate tool: on update to this version, each network site corrects once the wrong spelling of book names in pt-* versions (Genesis \u2192 G\u00eanesis, Exodo \u2192 \u00caxodo, Levitico \u2192 Lev\u00edtico, Deuteronomio \u2192 Deuteron\u00f4mio, Juizes \u2192 Ju\u00edzes, C\u00e2ntares \u2192 Cantares, Os\u00e9ias \u2192 Oseias, Miqu\u00e9ias \u2192 Miqueias, 1 and 2 Corintios \u2192 Cor\u00edntios, Efesios \u2192 Ef\u00e9sios, Colosenses \u2192 Colossenses, 1 and 2 Tesalonicenses \u2192 Tessalonicenses, 2 Timoteo \u2192 2 Tim\u00f3teo). Only the exact wrong spelling is replaced, so correct names and other versions do not change.<\/li>\n<li>The same correction runs at the end of every import, so a CSV with the old spelling does not bring the errors back.<\/li>\n<li>After the correction the plugin clears its own caches, asks LiteSpeed Cache to purge pages, and shows a one-time admin notice listing the changes.<\/li>\n<li>Corrections are adjustable with the <code>bdwp70_book_name_corrections<\/code> filter.<\/li>\n<li>Book 22 across versions: \"Cantares\" (ACF, slug <code>cantares<\/code>) and \"C\u00e2nticos\" (Almeida 1911, ARC, ARA, slug <code>canticos<\/code>) redirect to each other with a 301 when the requested slug does not exist in the chosen version, so switching versions while reading this book no longer leads to a missing page.<\/li>\n<li>The old slug map also works both ways for Colossenses and 1\/2 Tessalonicenses, covering ACF while the old names are still in the database.<\/li>\n<\/ul>\n\n<h4>1.1.77<\/h4>\n\n<ul>\n<li>Portuguese: titles and descriptions generated for search engines now have correct accents (\"Livros da B\u00edblia\", \"cap\u00edtulos\", \"vers\u00edculos\", \"cap\u00edtulo\").<\/li>\n<li>Quick access cards: the default icons were stored as \"?\" in the code, left over from lost emoji. They now use Basic Multilingual Plane symbols, which survive even in databases without utf8mb4. An icon already saved as \"?\" falls back to the default.<\/li>\n<li>Sitemap name map: \"Cantares\" (ACF spelling), \"Oseias\" and \"Miqueias\" (current Portuguese orthography).<\/li>\n<li>books.csv example in the admin panel with an accented \"G\u00eanesis\".<\/li>\n<li>The displayed book names come from the database, stored at import time; this version does not change them.<\/li>\n<li>Book URLs with corrected spelling: \/colosenses\/, \/1-tesalonicenses\/ and \/2-tesalonicenses\/ respond with a 301 to \/colossenses\/, \/1-tessalonicenses\/ and \/2-tessalonicenses\/, keeping chapter and verse. The redirect only applies when the requested slug does not exist in the version: while the old name is in the database, or in a version where it is the correct spelling, nothing changes. Shortcodes with the old spelling keep resolving. Map adjustable with the <code>bdwp70_legacy_book_slugs<\/code> filter.<\/li>\n<\/ul>\n\n<h4>1.1.76<\/h4>\n\n<ul>\n<li>SEO: the verse URL (\/book\/chapter\/verse\/) declares the chapter URL as canonical. It serves the whole chapter with the verse highlighted, and it used to declare itself canonical, which multiplied duplicates per verse and per translation.<\/li>\n<li>SEO: the verse URL noindex introduced in 1.1.74 is turned off. noindex combined with a canonical pointing to another page is a contradictory signal. The <code>bdwp70_noindex_verse_urls<\/code> filter still turns the old strategy back on as a whole, in which case the canonical returns to the URL itself.<\/li>\n<li>SEO: the chapter canonical is also applied to Rank Math (<code>rank_math\/frontend\/canonical<\/code>) and Yoast (<code>wpseo_canonical<\/code>), in case they emit their own.<\/li>\n<li>Sitemap: verse URLs are no longer included, regardless of the stored option, because they are no longer canonical. The matching checkbox in the admin panel is disabled with an explanation; the <code>bdwp70_sitemap_include_verses<\/code> filter can still force them in.<\/li>\n<li>Deep link: opening a verse URL scrolls the page to the highlighted verse, without overriding an explicit anchor in the URL.<\/li>\n<\/ul>\n\n<h4>1.1.75<\/h4>\n\n<ul>\n<li>Fix for the <code>X-Robots-Tag<\/code> header introduced in 1.1.74: it was registered on <code>template_redirect<\/code> at priority 1, but the plugin renders the virtual page at priority 0 and ends with <code>exit<\/code>, so the callback never ran. It moved to <code>send_headers<\/code>.<\/li>\n<li>The <code>noindex, follow<\/code> robots meta from 1.1.74 already worked and is unchanged; the header is a fallback for installs without an SEO plugin.<\/li>\n<\/ul>\n\n<h4>1.1.74<\/h4>\n\n<ul>\n<li>Individual verse URLs are marked <code>noindex, follow<\/code>. They are near-duplicates of the chapter page, which already includes every verse with its own anchor. <code>follow<\/code> is kept on purpose: links keep passing signals, only the page leaves the index.<\/li>\n<li>The marking covers four paths, so it works with or without an SEO plugin: WordPress <code>wp_robots<\/code>, the Rank Math filter, the Yoast filter and an <code>X-Robots-Tag<\/code> response header.<\/li>\n<li>It works per request, without a database option, so it applies to every site in a multisite network as soon as the plugin is updated.<\/li>\n<li>Can be turned off with the <code>bdwp70_noindex_verse_urls<\/code> filter.<\/li>\n<\/ul>\n\n<h4>1.1.73<\/h4>\n\n<ul>\n<li>The \"Include individual verses in the sitemap\" option is unchecked on new installs. When on, it publishes about 30,000 URLs against ~1,200 chapter URLs; since the chapter page already includes every verse with its own anchor, they are near-duplicates, and each crawler visit to one of them costs a full render.<\/li>\n<li>The option's description in the admin panel no longer recommends it and explains the cost instead.<\/li>\n<li>Existing installs are not changed: if the option was checked, it stays checked. To turn it off, use Settings &gt; B\u00edblia Digital &gt; SEO and URLs, or the <code>bdwp70_sitemap_include_verses<\/code> filter.<\/li>\n<\/ul>\n\n<h4>1.1.72<\/h4>\n\n<ul>\n<li>Reading: the Bible text has a controlled, centered measure (80ch, about 690px and 63 characters per line on desktop). The page stays full width; only the text is limited.<\/li>\n<li>Reading on mobile: the plugin no longer adds its own side padding to the theme's, and the text uses the available width again.<\/li>\n<li>Reading on mobile: the font size is saved only when the reader picks one. Always saving it overrode the smaller step the CSS already sets for narrow screens, leaving the text at 22px in a narrow column.<\/li>\n<li>Touch: the whole verse line becomes a selection area, with a soft highlight. Selecting and copying text still works, and link clicks follow their own target.<\/li>\n<li>Chapter selector: on mobile it opens as a scrollable bottom sheet with a dimmed backdrop. It used to be an absolute panel that overflowed the screen edge and left chapters out of reach.<\/li>\n<li>Sticky bar at the top of the chapter with the book, chapter number and navigation; on mobile it hides when scrolling down and returns when scrolling up.<\/li>\n<li>Keyboard: the left and right arrow keys change chapters, without interfering when focus is in a text field.<\/li>\n<\/ul>\n\n<h4>1.1.71<\/h4>\n\n<ul>\n<li>Performance: search uses the <code>palavra_fulltext<\/code> FULLTEXT index, which already existed in the schema but was not used by any query. The previous path, with <code>LIKE '%term%'<\/code>, had a leading wildcard and scanned the whole table twice per search.<\/li>\n<li>Index search matches words and prefixes: searching \"amor\" still finds \"amoroso\", but not \"desamor\". When the index returns nothing, the previous search runs as before, so no query ends up with zero results because of the change.<\/li>\n<li>Terms with words shorter than the index's minimum token, exact phrase searches with short words, and installs without the index keep the old path. The <code>bdwp70_use_fulltext_search<\/code> and <code>bdwp70_fulltext_min_token<\/code> filters adjust or disable it.<\/li>\n<li>Performance: the book list and the chapter count per book are cached for 12 hours with a per-request memo, following the pattern already used for Bible versions. The chapter count was a GROUP BY aggregate over the verses table, recomputed on every page.<\/li>\n<li>Performance: the search results cache goes from 5 minutes to 12 hours, adjustable with the <code>bdwp70_search_cache_ttl<\/code> filter. Importing already clears these caches.<\/li>\n<\/ul>\n\n<h4>1.1.70<\/h4>\n\n<ul>\n<li>New public identity: display name <code>EstudoBiblico B\u00edblia Digital<\/code>, slug and text domain <code>estudobiblico-biblia-digital<\/code>, and <code>Contributors: crispaorg<\/code>.<\/li>\n<li>Changes requested in the WordPress.org review.<\/li>\n<li>Theme compatibility CSS and JavaScript are no longer printed as <code>&lt;style&gt;<\/code>\/<code>&lt;script&gt;<\/code> and use <code>wp_register_style()<\/code>, <code>wp_register_script()<\/code>, <code>wp_add_inline_style()<\/code> and <code>wp_add_inline_script()<\/code>, loaded only on Bible pages.<\/li>\n<li>Sitemap: the physical index file is no longer written to the WordPress root. The public URLs stay the same, served dynamically by the existing routes. A leftover file from previous versions is deleted on update, and only when it was provably generated by the plugin.<\/li>\n<li>Custom translations uploaded by the administrator are stored in a dedicated subfolder of <code>wp_upload_dir()<\/code>, per site, protected against direct access. <code>WP_LANG_DIR<\/code> and the plugin folder are no longer used as write targets; old files are copied without being deleted and are still read as a fallback.<\/li>\n<li>Review of nonces, capabilities and sanitization in admin actions.<\/li>\n<li>Admin notices audited against Guideline 11.<\/li>\n<li>The distributed package no longer includes <code>.po<\/code> and <code>.mo<\/code> files: translations come from translate.wordpress.org.<\/li>\n<li>Public URLs, shortcodes, options, tables, hooks, handles and the BDWP70 prefix are preserved.<\/li>\n<\/ul>\n\n<h4>1.1.69<\/h4>\n\n<ul>\n<li>Metadata: plugin header aligned with the official WordPress.org requirements.<\/li>\n<li>Display name changed to <code>B\u00edblia Digital<\/code>, with the accent, in the header and in the readme. The slug, text domain, folder and main file remain <code>biblia-digital<\/code>.<\/li>\n<li><code>Plugin URI<\/code> points to the plugin page (<code>https:\/\/estudobiblico.org\/biblia-sagrada-online\/<\/code>), distinct from the <code>Author URI<\/code>, which stays at the site root.<\/li>\n<li><code>Description<\/code> rewritten in Portuguese, aligned with the plugin's audience.<\/li>\n<li><code>License<\/code> normalized to the SPDX identifier <code>GPL-2.0-or-later<\/code>; the license itself does not change.<\/li>\n<li><code>Tested up to<\/code> removed from the PHP header: it is not a plugin header field recognized by WordPress and remains declared in readme.txt.<\/li>\n<li>No <code>Update URI<\/code> was added, so updates are not diverted from WordPress.org.<\/li>\n<li><code>.pot<\/code> and pt_BR catalogs regenerated to reflect the name, description and version.<\/li>\n<\/ul>\n\n<h4>1.1.68<\/h4>\n\n<ul>\n<li>Consolidates the 1.1.67 line (abuse fix) with schema self-repair, hardened ZIP import and the quality tooling.<\/li>\n<li>Database: adds <code>BDWP70_Activator::maybe_upgrade()<\/code>, which creates\/updates tables and indexes on plugin updates and on activations through the legacy loaders, without requiring reactivation. The previous inline check was centralized in this method, now with a concurrency lock and runtime cache clearing.<\/li>\n<li>Security: <code>validate_uploaded_zip_archive()<\/code> rejects the upload with a <code>WP_Error<\/code> when the PHP zip extension is missing, instead of silently skipping the path traversal, count and size checks.<\/li>\n<li>Compatibility: <code>str_getcsv()<\/code> receives an explicit <code>$escape<\/code>, removing the deprecation warning on PHP 8.4\/8.5; the <code>wpmu_new_blog<\/code> hook, deprecated since WP 5.1, is no longer registered.<\/li>\n<li>Internationalization: import and ZIP validation messages use <code>__()<\/code>; <code>.pot<\/code> catalog regenerated and pt_BR translation included.<\/li>\n<li>Quality\/distribution: CI workflow (PHP 7.4\u20138.5 lint, PHPCS\/WPCS, PHPUnit on WordPress 6.6 and 7.0.x, Plugin Check on the ZIP), <code>composer.json<\/code>, <code>phpcs.xml.dist<\/code>, <code>.distignore<\/code> and integration tests.<\/li>\n<li>Fixes for pre-existing defects: the versioned <code>.gitignore<\/code> contained the command that generated it; twelve corrupted comments in the sitemap files were restored.<\/li>\n<li>No changes to data, options, slugs, canonical book names, tables, shortcodes, hooks or the BDWP70 prefix.<\/li>\n<\/ul>\n\n<h4>1.1.67<\/h4>\n\n<ul>\n<li>Abuse report hardening: removes runtime random queries with GROUP BY\/OFFSET and uses indexed ID range selection.<\/li>\n<li>Performance: persistent cache for version existence, the active Bible and sitemap counts, reducing repeated SELECT id and COUNT(*) on bot traffic.<\/li>\n<li>Database: additional indexes for counts and random selection by bible_id\/published\/id.<\/li>\n<\/ul>\n\n<h4>1.1.66<\/h4>\n\n<ul>\n<li>Performance: the physical sitemap is no longer validated on every public request; the check uses a transient and revalidates only periodically.<\/li>\n<li>Performance: random verse and random chapter no longer use random ordering in the database.<\/li>\n<li>Performance: CSV import uses real batch inserts for books and verses.<\/li>\n<li>Performance: search queries get a short transient cache and helper indexes.<\/li>\n<li>Performance: the SEO context has an internal per-request cache.<\/li>\n<\/ul>\n\n<h4>1.1.65<\/h4>\n\n<ul>\n<li>Removes the reader layout's internal automatic chapter card, which narrowed the Bible text in themes with their own sidebar.<\/li>\n<li>Adds a compact \"Chapters\" button at the top of the chapter, with a drop-down panel containing all the book's chapters, the active translation and a link to the full list.<\/li>\n<li>Keeps the native widget and the [biblia-capitulos-sidebar] shortcode available for manual use in real sidebars.<\/li>\n<li>Improves the mobile layout of the Verse by verse\/Continuous buttons, hiding the icon that took up space and avoiding truncated text.<\/li>\n<\/ul>\n\n<h4>1.1.64<\/h4>\n\n<ul>\n<li>Fixes the layout rule that pushed the chapter card below the text in some themes.<\/li>\n<li>Adds the native \"B\u00edblia Digital - Chapters of the current book\" widget for use in Appearance &gt; Widgets.<\/li>\n<li>Adds the [biblia-capitulos-sidebar] shortcode to insert the card manually in blocks or side areas.<\/li>\n<li>Adjusts the Aa panel on mobile to avoid truncated Verse by verse\/Continuous buttons.<\/li>\n<\/ul>\n\n<h4>1.1.63<\/h4>\n\n<ul>\n<li>Adds a compact reading options panel with font size, verse by verse\/continuous layout, Default\/Lexend font and reading background.<\/li>\n<li>Saves the reader's preferences in the browser.<\/li>\n<li>Improves the chapter side widget with the book title, current chapter, active translation and navigation grid.<\/li>\n<\/ul>\n\n<h4>1.1.62<\/h4>\n\n<ul>\n<li>Removes the duplicated \"no results\" message on the dedicated search page.<\/li>\n<li>Keeps a single message in the dedicated search summary.<\/li>\n<li>Keeps the no-results fallback in the main shortcode and widgets.<\/li>\n<\/ul>\n\n<h4>1.1.61<\/h4>\n\n<ul>\n<li>Definitively fixes the missing message when a search finds no term or word.<\/li>\n<li>Version 1.1.60 fixed the list function and the dedicated page, but the main template only called the list when there were items.<\/li>\n<li>The main template now also calls the no-results fallback in search mode.<\/li>\n<li>Keeps an accessible, styled message in the main shortcode, the dedicated page and the public search flows.<\/li>\n<\/ul>\n\n<h4>1.1.60<\/h4>\n\n<ul>\n<li>Fixes the message shown when a search finds no term or word in the Bible.<\/li>\n<li>The message now appears both on the dedicated search page and in the main shortcode's search mode.<\/li>\n<li>Adds aria-live markup for accessibility and a subtle visual style for the empty search notice.<\/li>\n<\/ul>\n\n<h4>1.1.59<\/h4>\n\n<ul>\n<li>Adds a dedicated XSL to display the B\u00edblia Digital sitemaps visually in the browser.<\/li>\n<li>Keeps the XML structure plain for crawlers and search engines.<\/li>\n<\/ul>\n\n<h4>1.1.58<\/h4>\n\n<ul>\n<li>Fixes Plugin Check findings in the sitemap diagnostics and in the sitemap SQL queries.<\/li>\n<li>Adds translators comments to strings with placeholders.<\/li>\n<li>Removes dynamic SQL fragments for the published filter and uses prepared\/escaped branches.<\/li>\n<li>Adds caching and safe declarations to the sitemap's paginated queries without changing the functional logic of version 1.1.57.<\/li>\n<\/ul>\n\n<h4>1.1.56<\/h4>\n\n<ul>\n<li>Definitively fixes URL generation in the Bible XML sitemap.<\/li>\n<li>Adds a robust fallback that resolves a Bible with real content from the verses table.<\/li>\n<li>Avoids an empty sitemap when the books table is incomplete but the verses exist.<\/li>\n<li>Makes the published filter resilient for legacy databases.<\/li>\n<li>Keeps block pagination, LIMIT\/OFFSET and integration with the WP Sitemap API.<\/li>\n<\/ul>\n\n<h4>1.1.51<\/h4>\n\n<ul>\n<li>Fixes missing translator comments reported by Plugin Check.<\/li>\n<li>Rewrites the official readme.txt in English for repository review.<\/li>\n<li>Avoids nonce warnings for navigation-only admin tabs by reading the tab parameter safely.<\/li>\n<li>Reviews rewrite rules for version-aware Bible URLs.<\/li>\n<li>Registers public query vars used by friendly URLs and legacy query-string URLs.<\/li>\n<li>Preserves compatibility with old <code>?bdwp_bible_id=1<\/code> URLs.<\/li>\n<li>Flushes rewrite rules only when explicitly marked as stale, such as plugin activation, plugin upgrade, or SEO base changes.<\/li>\n<li>Adds clearer admin instructions to save permalinks once after changing the Bible URL base.<\/li>\n<\/ul>\n\n<h4>1.1.50<\/h4>\n\n<ul>\n<li>Reorganizes the admin panel into tabs: Overview, Import Bible, Bible Versions, Frontend Translation, Shortcodes, SEO and URLs, and Diagnostics.<\/li>\n<li>Places Import Bible before Frontend Translation to reduce operational confusion.<\/li>\n<li>Adds a Shortcodes tab with cards, examples, attributes, and copy buttons.<\/li>\n<li>Updates readme.txt with all shortcodes, aliases, and attributes.<\/li>\n<li>Preserves compatibility with legacy shortcodes.<\/li>\n<\/ul>\n\n<h4>1.1.49<\/h4>\n\n<ul>\n<li>Keeps the hero version display as a static badge and the functional translation dropdown below the book lists.<\/li>\n<li>Fixes dropdown stacking\/overflow so version choices remain readable over the Bible landing layout.<\/li>\n<li>Preserves the plugin title image and prevents theme portal logos from replacing functional Bible images.<\/li>\n<\/ul>\n\n<h4>1.1.48<\/h4>\n\n<ul>\n<li>Adds SEO-friendly Bible version paths such as <code>\/biblia-digital\/versao\/acf-pt-br\/john\/3\/16\/<\/code>.<\/li>\n<li>Keeps backward compatibility with the previous <code>bdwp_bible_id<\/code> query parameter.<\/li>\n<li>Moves the public translation\/version selector below the Old Testament and New Testament book containers.<\/li>\n<li>Replaces the decorative separator with a functional translation selection panel.<\/li>\n<li>Preserves the selected version across books, chapters, verses, breadcrumbs, search, and pagination.<\/li>\n<\/ul>\n\n<h4>1.1.46<\/h4>\n\n<ul>\n<li>Renamed the public plugin package to Biblia Digital.<\/li>\n<li>Updated the text domain to <code>biblia-digital<\/code>.<\/li>\n<li>Removed the custom update header from the public package.<\/li>\n<li>Updated the search block to API version 3.<\/li>\n<li>Rewrote the WordPress.org readme in English.<\/li>\n<li>Preserved legacy classes, options, database tables, and shortcodes.<\/li>\n<\/ul>\n\n<h4>1.1.44<\/h4>\n\n<ul>\n<li>Normalized UTF-8 encoding and line endings.<\/li>\n<li>Improved admin and readme text.<\/li>\n<li>Preserved the CSV importer and safe uninstall defaults.<\/li>\n<\/ul>","raw_excerpt":"Publish, search, and import Bible texts in WordPress with shortcodes, widgets, a Gutenberg block, and an organized admin panel.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/350644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=350644"}],"author":[{"embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/crispaorg"}],"wp:attachment":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=350644"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=350644"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=350644"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=350644"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=350644"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=350644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}