2.5.x Generation: Enterprise Architecture & Engine Modernization

A monumental release series transforming the theme options framework, multilingual engine, Page Builder storage model, and admin architecture into a unified, object-oriented system.

Version 2.5.0 – Core Stabilization & Feature Completion

  • Options Translation by Default: Removed the $translated parameter from get_option(); translated option values are now loaded by default, eliminating the need for a separate translation-aware call.
  • Translated Theme Options Fields: Added translatable fields in Theme Options (Site Title, Site Description, and others); translated data is filtered and rendered inline on the relevant settings tabs.
  • CTA Button in Navigation: Added a Call-to-Action button option to Theme Options, rendered in both the top navigation bar and the hamburger menu with a dedicated hookable Modals refactor.
  • Administration Tab in Theme Options: Added a new Administration tab in Theme Options with an option to restrict access to the Theme Options panel to specific user roles.
  • Ads System: Introduced a hookable Ads class with a render_ads() method and a bisteinoff_ad action hook for flexible ad placement.
  • Socials Expansion: Added LinkedIn and TikTok to the socials configuration; refactored the Socials hookable class with improved security and added the bisteinoff_socials_config filter.
  • Copyright Menu Class: Added the bst-copyright-menu CSS class to the copyright navigation menu output.
  • Sitemap Architecture Overhaul: Refactored XML sitemap rendering to a smart deferred architecture; made Sitemap::store_term_lastmod() public; added full sitemap XML render mode accessible only in admin; added support for Tribe Events posts.
  • CSS Dependency Chaining: Chained CSS script dependencies in the enqueue order to ensure correct load sequence.
  • WooCommerce Updates: Updated single-product/product-image.php to remove wp_is_mobile() logic and use .bst-carousel for product thumbnails; added recently viewed products rendering; updated styling to WooCommerce 10.6.1. Fixed a fatal error caused by $attachment_id receiving an empty string instead of an integer when a featured image is not set.
  • Layout Width Limit: Added a maximum layout width and block height constraint for screens wider than 1920px.
  • Page Layout Alignment: Adjusted page header, page content, page body, and single post comments to align with the content block width.
  • Footer Background Refactor: Corrected layout for footer sections with background images and refactored the Footer hookable class.
  • FAQ Translations: Added post translation support and content translation to the FAQ component.
  • Multilingual Admin Check: Added a multilingual status check in the admin Page Builder to prevent incorrect language tab rendering when multilingual is not active.
  • Maintenance Mode Refactor: Refactored the maintenance mode template, options, and hookable class; made maintenance pages accessible to both administrators and editors.
  • Security Hardening: Added a nonce to the bisteinoff-testimonials script localization; fixed CSP header output; corrected inline script nonces; disabled Gutenberg’s inline global-style injection.
  • Options Panel Security: Fixed saving of empty fields and resolved additional security issues in the options panel save path.
  • Language Name Capitalization: Applied forced first-capital formatting to language names in the Choose Language modal.
  • SEO Filters: Added new filters for customizing SEO template tags; removed sanitization on SEO meta output to prevent double-escaping.
  • Weather API Stability: Refactored the remote weather API connection for improved reliability.
  • Options Migration: Migrated internal option keys from page_on_{type} to page_for_bisteinoff_{type} and bst_openweather_{type} to bisteinoff_openweather_{newtype}.

Version 2.5.1 – Admin Form Scaffolding

  • Isolated Field Rendering Modules: Consolidated admin field sets into self-contained rendering classes, replacing scattered procedural HTML output.
  • Options Panel Layout: Refactored panel spacing using CSS Flexbox to resolve display clipping under multi-tab configurations.
  • Conditional Asset Enqueuing: Scoped media uploader dependencies to load only on Theme Options, Theme Design, and Page Builder admin pages, reducing unnecessary resource loading.

Version 2.5.2 – Design Kit Color System & Theme Design Overhaul

  • AbstractOptionsPanel Base Class: Introduced AbstractOptionsPanel as a shared base class for ThemeOptions and ThemeDesign; migrated to a DIV-based Settings API layout, replacing the legacy TABLE structure.
  • Brand Colors & Bootstrap 5 Colors Tabs: Added a new Brand Colors tab to Theme Design and renamed the Semantic Colors tab to Bootstrap 5 Colors.
  • Color Palette Field: Introduced a new color_palette field type with a pop-up Color Palette picker, get_theme_colors() and get_theme_gradients() methods, CSS custom property and token output, and live swatch synchronization when primitive colors change.
  • Gradient Palette Field: Added a gradient palette field with a dedicated render_gradient_palette_field() method and reusable render_color_palette_field_by_type(); removed the old <select>-based color and gradient field methods.
  • Buttons Tab: Added a Buttons tab in Theme Design with controls for border width, border radius, and X/Y padding for all button types. Replaced the bst-btn class with bst-primary as the primary button class.
  • Sections Tab: Added gradient palette fields to the Sections tab in Theme Design.
  • Heading Field: Added a heading field type to the options panel for section group titles.
  • JSON Config in JavaScript: Added support for passing configuration JSON data from PHP to JavaScript via a localized variable.
  • SVG Icon System: Introduced a hookable SVG_Icons class for outputting and referencing the SVG sprite; switched from footer inline SVG sprites to a cached external SVG sprite file for improved browser caching.
  • SVG Sprite Build Pipeline: Added package.json, package-lock.json, and gulpfile.mjs with /src/ asset source folders; resolved CSS compilation errors and SVG sprite ID conflicts in the build.
  • Media Uploader Fix: Fixed media uploader enqueuing on post.php pages where it was previously missing.
  • CSS Builder Compatibility: Updated base.min.css generation logic for compatibility with the new Design Kit color system; updated legacy CSS variables.

Version 2.5.3 – Theme Options Panel UI Rebuild

  • Options Panel Brand Styling: Added the Bisteinoff brand logo, applied the Sora Google Font to the options panel H1, and rebuilt the panel header styling.
  • Tab Group Titles & Styling: Added tab group title support; rebuilt tab styling with new primitive colors, borders, and panel body and footer layout.
  • WP Admin Bar Contact Link: Added a direct contact link to the WordPress admin bar.
  • Button & Border Radius Codex: Added ghost buttons, danger buttons, ghost danger buttons, and a border radius codex section to the Theme Options styling reference.
  • Color Tokens: Added checkbox, radio, and contextual color tokens to the options panel.
  • SVG Icons Update: Updated SVG icon definitions across Theme Options and Theme Design to use SVG sprite IDs via the new get_admin_icon() method.
  • Admin Icon Class: Added the bst-icon CSS class for SVG icon elements in the admin panel.
  • SVG Fill Attribute Preservation: Corrected SVG sprite build to preserve fill and stroke attributes.
  • Help & News Widgets: Added Help and Latest News sidebar widgets to the Theme Options panel.
  • Notice Styling: Added admin notice styling and split the template render method into sub-methods.

Version 2.5.4 – Admin Form Engine Hardening

  • FormComponents Namespace Migration: Moved FormComponents to the Bisteinoff\Admin namespace to make it reusable across metabox, options panel, testimonials, and other admin contexts.
  • FormComponents API Standardisation: Standardised all FormComponents method signatures to ( $id, $value, $args = [] ); added optional name and description parameters; added new methods for form controls used in the options panel.
  • Checkbox and Radio Fieldset Extraction: Moved checkbox_fieldset and radio_fieldset rendering from OptionsPanel into FormComponents, making them available as shared, reusable components.
  • FormComponents Method Renames: Renamed select_cat()taxonomy_select(), select_form()cf7_select(), and select_modal()modal_select() for clarity.
  • OptionsPanel Delegated to FormComponents: Refactored OptionsPanel field rendering methods to delegate output to FormComponents; sorted field rendering methods alphabetically.
  • BEM Classes in Options Panel: Applied BEM naming to HTML classes in the options panel, language labels, and tab elements.
  • Security Improvements: Fixed multiple security issues in Theme Options save and render paths.
  • Checkbox Hidden Input Fix: Fixed a bug where a checkbox_fieldset was incorrectly reading its value from a hidden input.
  • Multilingual URL Fixes: Fixed a broken home_url filter and incorrect link generation in language versions.
  • Media Uploader Enqueue Fix: Fixed media uploader not being enqueued on post-new.php pages; applied correct button styling in the metabox.
  • Theme Check Plugin Compliance: Resolved all issues flagged by the Theme Check plugin.

Version 2.5.5 – WooCommerce Metabox & Admin Script Isolation

  • WooCommerce MetaboxRenderer Integration: Refactored the WooCommerce video gallery metabox to use MetaboxRenderer; moved video gallery JavaScript logic from woo-product-video-gallery.js into media-uploader.js; updated video gallery component HTML classes to follow BEM naming.
  • Product Video Gallery Migration: Added a database migration renaming the _product_video_gallery meta key to _bst_product_video_gallery_ids; moved all migrations to the /admin/migrations/ directory.
  • WooCommerce Video PHP Class Refactor: Refactored the Video PHP class within the WooCommerce module.
  • Admin Testimonials Module: Added Bisteinoff\Admin\Modules\Testimonials to isolate admin-only testimonials logic; moved get_default_settings() to the front-end testimonials class.
  • Testimonials Metabox Classes: Added the postbox CSS class to Testimonials and Media Gallery metaboxes; added a layout icon to the SVG sprite and rendered it in the Page Builder metabox header.
  • Metabox Status Class Rename: Renamed the element status CSS class from bst-section-status to bst-metabox__status.
  • Page Builder Admin SCSS Build: Added Page Builder admin SCSS to the CSS render rules.
  • SEO Module Isolation: Moved SEO admin-only logic to Admin\Modules with a separately enqueued JavaScript file and corrected script localisation.

Version 2.5.6 – Metabox Architecture & Field Rendering Refactor

  • MetaboxRenderer Refactor: Refactored the MetaboxRenderer class with full PHPDoc coverage; introduced a MetaboxRenderer::register() static method; removed stale per-user metabox ordering options.
  • FieldsManager Refactor: Renamed the post_metabox_field() method to render_field(); simplified field rendering logic in FieldsManager::render_field_inner(); removed the redundant hide-section field type.
  • MetaboxSaver Extraction: Separated save logic into an abstract MetaboxSaver class and a concrete PostMetaboxSaver class.
  • MetaboxData Class: Introduced MetaboxData as a centralised, extendable class for retrieving metabox field configuration arrays; updated MetaboxHandler and TermMetaboxHandler to retrieve fields data via MetaboxData methods.
  • Term Metabox System: Added term metabox handler, renderer, and saver; extended FieldsManager with a $context parameter (alongside a renamed $object_id) to support both post and term metabox contexts; deprecated the legacy bisteinoff_seo_taxonomies filter.
  • SEO Class Consolidation: Removed the now-empty SEO class shell; renamed SEO_TagsSEO; removed the metabox-seo.php template (retained only for term metaboxes).
  • Centralised SEO & Slide/Feature Metaboxes: Moved SEO, Slide, and Feature metabox rendering into MetaboxHandler; added checkbox-fieldset field type to the metabox system; migrated contact page data to the new field structure.
  • SVG Icons in Metaboxes: Added SVG sprite icon search and translation in metaboxes; applied BEM naming to the SEO metabox snippet preview block; removed redundant sanitize calls on get_post_meta() / get_term_meta() output.
  • Sitemap Fix: Made Sitemap::store_term_lastmod() public to allow correct invocation from term hooks.
  • Double-Escaping Removal: Removed unnecessary escape function wrapping in Theme Options to prevent esc_html(esc_html()) double-encoding.
  • PHPDoc Cleanup: Removed @access and redundant @final tags; normalised spacing in PHPDoc blocks across the codebase.

Version 2.5.7 – Admin UI & Metabox Styling

  • WP 7.0 Compatibility: Verified and confirmed compatibility with WordPress 7.0.
  • Updated Admin Color Palette: Updated the admin color palette; applied correct button styling to the metabox via MetaboxRenderer; updated media uploader HTML classes and bst-form control classes. Updated options panel styling for compatibility with WordPress 7.0.
  • News Widget Styling: Updated the News sidebar widget styling in the options panel with a gradient treatment.
  • Options Panel Final Styling: Applied final styling pass to the options panel layout and SCSS structure.
  • Tab-Switching Flexbox Preservation: Added bst-metabox__field-wrapper to maintain Flexbox display state correctly when switching between metabox tabs.
  • BEM Metabox Classes: Applied BEM naming conventions to all metabox HTML class attributes.
  • Metabox Conditional Tabs: Added conditional tab output logic — tabs are suppressed when only one unique tab slug exists across all rendered fields.
  • Translated Button in Metabox & Options Panel: Centralised translated field button rendering into a shared method used by both the metabox and options panel.
  • Language Flags in Fields: Added language flag indicators to translated text, textarea, and WYSIWYG (TinyMCE) fields in the metabox and options panel; added input group styling for translated field groups; moved flags from <label> elements to the input group wrappers; moved language-related CSS to a separate file loaded only on multilingual sites.
  • Admin Form ARIA Compliance: Added bst_ prefix to field IDs in the options panel; added aria-label to translated text and textarea fields lacking a visible <label>; removed the for attribute from <label> elements where it is not applicable.
  • Testimonials Name & City Translation: Added translatable output of testimonial name and city on the front end.
  • Theme Helper Methods: Added is_default_language() and is_multilingual() methods to the core theme class.
  • Admin Assets Class Split: Moved admin assets from Bisteinoff\Assets to a dedicated Bisteinoff\Admin\Assets class; added enqueue_theme_core_scripts() method.
  • Metabox HTML Optimisation: Removed redundant styling rules; optimised post and gallery container HTML class output.
  • Builder Layout Icon Fix: Fixed icon fieldset grid layout in the Page Builder; updated builder admin to use standard WordPress UI buttons and applied the updated color palette.

Version 2.5.8 – Admin Form Video Gallery & Display Field Types

  • Video Gallery Form Component: Added a video_gallery field type to FormComponents for configuring video gallery inputs in metaboxes.
  • Display Field Output Formats: Added display, display-email, and display-url output format modes to the metabox field renderer for read-only field presentation.
  • MetaboxRenderer Screen Detection Caching: Added in-memory caching of screen type data in MetaboxRenderer::is_applicable_screen() to avoid redundant get_current_screen() calls.
  • CPT Data Caching: Added in-memory caching of custom page type and template data in the CPT class.
  • Theme Options HTML Entities Fix: Fixed use of raw < and > inside __() translation strings, replacing them with &lt; and &gt;.

Version 2.5.9 – Consolidated Taxonomy Handlers

  • Object-Oriented Term Metabox System: Introduced type-safe abstract metabox controllers for unified handling of rendering, saving, and field configuration across both post and term metabox contexts.
  • Redundant Escaping Elimination: Removed stacked, duplicate sanitization calls from theme option output paths.
  • Legacy Hook Deprecation: Permanently retired the bisteinoff_seo_taxonomies filter and other obsolete structural filtering functions.

Version 2.5.10 – Dynamic Media Gallery Extensions

  • Extensible MetaboxData: Made MetaboxData extendable by child classes, enabling child themes to customise or extend metabox field configuration without modifying core files.
  • Theme Options HTML Entities Fix: Corrected use of raw angle brackets inside translatable strings, replacing them with HTML entities to prevent rendering issues.
  • Video Gallery Form Component: Added the video_gallery form component to FormComponents for use in WooCommerce product video gallery metaboxes.

Version 2.5.11 – WooCommerce Integration & Metabox Refinements

  • WooCommerce MetaboxRenderer Integration: Refactored the WooCommerce product video gallery metabox to use the shared MetaboxRenderer class; migrated video gallery JavaScript from a dedicated file into media-uploader.js; updated HTML classes to BEM naming.
  • Product Video Gallery Meta Key Migration: Added a database migration renaming _product_video_gallery to _bst_product_video_gallery_ids; consolidated all migration files under /admin/migrations/.
  • Admin Testimonials Module: Extracted admin-only testimonials logic into Bisteinoff\Admin\Modules\Testimonials; moved get_default_settings() to the front-end testimonials class.
  • Screen Detection Caching: Added in-memory caching in MetaboxRenderer::is_applicable_screen() to prevent redundant get_current_screen() lookups during metabox registration.
  • CPT Data Caching: Cached custom page type and template data within the CPT class to avoid repeated filesystem reads.

Version 2.5.12 – Admin Form Label & Flag Refinements

  • Centralised Label & ARIA Output: Refactored label and aria-label rendering in the metabox to use centralised FormComponents methods.
  • Field ID Prefix: Added the bst_ prefix to all field IDs in the options panel for namespacing consistency.
  • Flag Indicators on Translated Fields: Added language flag indicators to translated textarea and WYSIWYG (TinyMCE) fields; implemented input group styling for translated field groups; moved flag output from <label> elements to the input group wrapper; corrected .bst-lang-flag styling and separated it into a deprecated legacy block.
  • Blogname & Blogdescription Flags: Added language flag indicators to the Site Title (blogname) and Site Description (blogdescription) fields in the multilingual settings.
  • Metabox Field Wrapper: Added bst-metabox__field-wrapper to maintain Flexbox display state when switching between metabox tabs.
  • BEM Metabox Classes: Applied BEM naming conventions throughout the metabox HTML output.
  • Conditional Metabox Tabs: Implemented conditional tab suppression — tabs are hidden when all rendered fields share a single tab slug.
  • Testimonials Name & City Translation: Added translatable front-end output for testimonial name and city fields.
  • Theme Helper Methods: Added is_default_language() and is_multilingual() to the core theme class.
  • Admin Assets Split: Moved admin asset enqueuing from Bisteinoff\Assets to a dedicated Bisteinoff\Admin\Assets class; introduced an enqueue_theme_core_scripts() method. Language-related CSS is now loaded in a separate file, enqueued only on multilingual sites.
  • Metabox HTML Optimisation: Removed redundant CSS rules; optimised post and gallery container HTML classes.
  • Admin CSS Fixes: Fixed options panel top margin after WP admin notices; standardised .label styling to match the native <label> element; used SCSS $breakpoints map for all @media queries in admin SCSS.

Version 2.5.13 – Asynchronous Workspace Stabilization

  • Builder UI Buttons: Replaced custom-styled builder interface buttons with standard WordPress UI buttons and applied the updated admin color palette.
  • Builder Layout Icon Grid Fix: Fixed the icon fieldset grid layout in the Page Builder admin workspace.
  • SEO Module Scoping: Moved SEO admin-only logic to Bisteinoff\Admin\Modules with a separately enqueued JavaScript file; corrected script localisation.
  • Testimonials Default Settings: Moved the get_default_settings() method to the front-end testimonials class, removing it from the admin module.
  • Media Uploader & WYSIWYG Styling: Fixed metabox media uploader and WYSIWYG (TinyMCE) field styling.
  • Translated Field Flexbox Fix: Fixed Flexbox layout of translated fields in Theme Options.

Version 2.5.14 – PHP 8.2 Alignment & Multilingual Engine (Major Milestone)

  • PHP 8.2+ Compatibility: Completed a comprehensive refactor of the theme’s core engine, replacing legacy constant-based patterns with type-safe, method-driven equivalents throughout.
  • Core Class Rename: Renamed Bisteinoff\Theme to Bisteinoff\Core and its file accordingly; added __unserialize() method and improved error loading messages.
  • Sub-Theme Removal: Removed the BISTEINOFF_SUB_THEME constant, the Bisteinoff\SubTheme class, the deprecated bisteinoff_template_part_path() function, and all sub-theme template files.
  • Public require_once(): Made Core::require_once() public, replacing the equivalent method in AdminLoader.
  • Admin Page Folder Structure: Renamed admin panel classes — AbstractOptionsPanelAbstractSettingsPanel, ThemeOptionsWebsiteSettings, ThemeDesignDesignSettings — and moved them to the Bisteinoff\Admin\Pages namespace. Renamed admin folders (theme-optionswebsite-settings, theme-designdesign-settings) and updated page slugs accordingly.
  • Languages Settings Page: Added a dedicated Languages Settings page in Theme Options for managing configured languages from the admin panel.
  • Decoupled Translation Modules: Separated the multilingual system into independent Load and Context classes under the Bisteinoff\Multilingual namespace, each with single-responsibility scope. Moved multilingual navigation to a dedicated Bisteinoff\Multilingual\Hooks\Nav class.
  • Database-Tracked Locale Tables: Migrated locale context from hard-coded runtime files to dynamic database-driven tracking; create_language_tables() now relies on the Languages Settings rather than the removed BISTEINOFF_SITE_LANGUAGES constant.
  • Legacy Constants Removed: Removed BISTEINOFF_LANG_CODE, BISTEINOFF_LANG_PREFIX, BISTEINOFF_LANG_DIR, BISTEINOFF_LANG_SLUGS, BISTEINOFF_DEFAULT_LANG_SLUG, and BISTEINOFF_LANG_SLUG; replaced with static methods on the Context class (get_current_locale(), get_current_lang_dir(), current_slug(), primary_language(), all_languages(), secondary_languages()).
  • Locale-Based Table Key Method: Replaced the BISTEINOFF_LANG_PREFIX constant with a current_table_key() private method in the Database hooks class; added preg_quote() around locale slugs in regex patterns to support hyphenated locales such as fr-ca.
  • Locale-Aware Menu Mapping: Added Bisteinoff\Multilingual\Hooks\Nav; removed multilingual navigation logic from Bisteinoff\Hooks\Nav.
  • Translated Field Attribute Rename: Replaced the lang HTML attribute on translated fields with locale throughout OptionsPanel field registration methods and FormComponents text, textarea, and WYSIWYG methods.
  • Published Language Support: Added a Published checkbox to the Add Language widget UI; added Core::is_admin_or_editor() method; Context::$published_only is now set based on this check; language output differentiates between enabled/disabled and published/unpublished states.
  • LanguageData from WordPress API: Refactored LanguageData to fetch base language data from the WordPress translations API; added country variants to previously existing languages.
  • Translation Prefix Rename: Renamed the bst_translated_ field prefix to bst_t_; removed the bisteinoff_replace_prefix() helper function.
  • Dynamic Lang CSS Generation: Removed static lang.scss/lang.css files; added PHP-based minified CSS generation including lang.min.css with flag icons for all enabled/disabled and published/unpublished language states. Added lang.min.css to .gitignore.
  • Activation Environment Guards: Added pre-activation checks enforcing minimum PHP and WordPress version requirements, blocking installation on incompatible server environments.
  • Default Checkbox & Radio Values: Added default value support for checkbox_fieldset and radio_fieldset fields when no data exists in the database yet.
  • Single Tab Suppression: Added logic to hide the tab wrapper in the options panel when only one tab is present.
  • Testimonials Settings Rendering: Updated Testimonials Settings page to render fields via the centralised options panel render methods.
  • Language Settings UI Fixes: Corrected flag rendering for the primary language default; fixed metabox field rendering and saving for language-related fields; resolved layout issues in the language settings data table including proper class assignment on row addition.

Version 2.5.15 – Centralised API & Asset Architecture

  • API Directory Consolidation: Moved all API-related functionality into a unified /inc/api/ directory, replacing dispersed module references with a single orchestration entry point.
  • Centralised Widget Rendering: Refactored SEO, Socials, and Security admin widgets into a shared rendering system with standardised output and updated styling.
  • Theme Constants Restructure: Renamed BISTEINOFF_TEMPLATEPATH to BISTEINOFF_TEMPLATE_DIR and introduced six additional path and URI constants (BISTEINOFF_TEMPLATE_URI, BISTEINOFF_ASSETS_DIR, BISTEINOFF_ASSETS_URI, BISTEINOFF_ADMIN_ASSETS_DIR, BISTEINOFF_ADMIN_ASSETS_URI), replacing ambiguous legacy definitions and removing the unused BISTEINOFF_THEME_DEV_MODE constant.
  • Assets Class Refactor: Consolidated asset enqueuing logic into a new Assets orchestrator class, distributing related responsibilities across Optimizer, Scripts, and ThemeLoader. Added ThemeLoader::debug_component_names() for future diagnostic use.
  • Metabox Layout Defaults: Changed the default metabox layout to single-column, retaining two-column layout for advanced, normal, and Template Settings metaboxes only.

Version 2.5.16 – Interface Animations, Sanitization & Builder Parity

  • Skeleton Loading Animation: Added CSS skeleton animation to Page Builder modal content while field data loads, improving perceived responsiveness.
  • Modal Blur Effect: Applied a CSS blur treatment to the background when a Page Builder modal is open, visually focusing attention on the active configuration overlay.
  • Centralised CSS Class Sanitizer: Introduced Bisteinoff\Helpers\Sanitizer with css_class() and css_classes() methods for consistent, reusable class name sanitization across the codebase.
  • Page Builder Field Parity: Aligned translated text, URL, and number fields in the Page Builder with the rendering and saving behaviour of equivalent post and term metabox fields, including WYSIWYG (TinyMCE) field parity.
  • FormComponents Integration: Refactored Page Builder input rendering for text, number, and URL fields to use shared FormComponents methods, eliminating duplicated field markup.
  • Section Component Refactor: Renamed internal builder component properties (label → title, dashicon → icon) and refactored the Section component for consistency with the updated interface contract.
  • Admin Panel Color Fixes: Removed redundant SCSS color variables from the options panel and corrected dark grey to black for improved visual hierarchy.
  • Unpublished Language Border Indicator: Newly added languages in Language Settings now display with a yellow border to indicate unpublished status.

Version 2.5.17 – Design Settings & Child Theme Stability

  • Color Helper Relocation: Moved color utility methods into Bisteinoff\Admin\Pages\DesignSettings, consolidating color-related logic within the appropriate admin page class.
  • Child Theme Fatal Error Fix: Resolved a fatal error occurring on parent-to-child theme switch caused by premature class initialisation in the multilingual bootstrap sequence.

Version 2.5.18 – Page Builder Storage Overhaul (Major Milestone)

  • New Storage Model: Replaced the previous mixed-blob metadata approach with a unified, direct class string architecture. All Page Builder layout data is now stored and retrieved through a single structured metadata key, eliminating the bst_builder_counters meta key, the bst_builder_edited_elements and bst_builder_remove_elements hidden fields, and all associated JavaScript tracking logic.
  • Frontend Output Updates: Updated front-end rendering methods for section, row, column, and block elements to read from the new metadata structure.
  • Centralised AdminTemplates Class: Replaced multiple small PHP template files with a single AdminTemplates class responsible for all metabox and modal HTML output, and refactored the AJAX handler accordingly.
  • Admin Data Flow Refactor: Refactored admin PHP scripts for load, templates, assets, metabox, save, and AJAX into a clear pipeline where page data is fetched via Admin::get_admin_page_data(), passed to the metabox, and forwarded to section render templates.
  • Builder Bug Fixes: Fixed a PHP type coercion bug with the hidden element status in render_element_data(); corrected wrong callback references in AdminAjax::render_element_data(); fixed the bst_builder_modal_id hidden field in the standard modal form; resolved double wp_unslash() application in load_modal that corrupted escape sequences; fixed block ID collection for unique ID validation; and corrected the name attribute on language-related builder fields.
  • AJAX Simplification: Simplified AdminAjax::render_element() and moved parent ID validation into this AJAX method, reducing duplication with the save path.
  • Component Refactors: Refactored shortcode, slider, title, WYSIWYG (TinyMCE), Code, and Embed components; updated Code and Embed with proper sanitization and PHPDoc.
  • Unpublished Preview Access: Unpublished language versions of a page are now accessible to administrators and editors; all other users receive a 302 redirect.
  • Multilingual Migration: Added a database migration to transform and remap Page Builder data for all existing locale versions, including unpublished and non-enabled locales. Migration correctly handles empty builders and removes stale metadata after migration.
  • JavaScript Build: Added minified production builds of Page Builder JavaScript bundles.

Version 2.5.19 – Multilingual Database Integrity & Builder Refinements

  • Foreign Key Constraints on Locale Tables: Added foreign key constraints to locale postmeta and termmeta tables, enforcing referential integrity between locale metadata and their parent post or term records.
  • Locale Table Cleanup on Removal: Implemented automatic removal of locale database tables when a locale is confirmed as removed. Additionally, orphaned postmeta and termmeta rows are now deleted when their associated post ID or term ID is removed.
  • Page Builder & Code Formatting Options: Replaced the BISTEINOFF_PAGE_BUILDER_SCREENS and BISTEINOFF_CODE_FORMATTING constants with database-backed theme options, allowing these features to be toggled from the admin panel without code changes.
  • Code and Embed Component Refactor: Refactored the Code and Embed Page Builder components with improved sanitization logic and complete PHPDoc coverage.
  • Content List Template Part: Added the content-list-item.php template part for use in list-style content layouts.
  • Language Navigation Fix: Corrected URL generation for language version navigation links; refactored URL parsing utilities used by the language switcher.
  • Modal Double Unslash Fix: Resolved a data corruption bug where wp_unslash() was applied twice during modal load, corrupting newline and quote characters in stored content.

Version 2.5.20 – Post Duplication & Database Migration Hardening

  • Duplicate Post Across All Languages: Added a new admin action to duplicate a post simultaneously across all configured language versions, creating locale-specific copies in a single operation.
  • Trash State Duplication Guard: Prevented the duplicate post action link from appearing for posts in the Trash, avoiding unintended duplication of discarded content.
  • Orphaned Row Purge on Migration: Extended the locale postmeta and termmeta migration to purge orphaned rows from existing tables before applying foreign key constraints, ensuring constraint addition succeeds on pre-existing data.
  • Idempotent Foreign Key Migration: Refactored the foreign key migration method to be safely re-runnable, checking for existing constraints before attempting to add them to avoid errors on repeated execution.

Version 2.5.21 – WooCommerce Translation Support

  • Post Excerpt in Locale Tables: Added the post_excerpt field to locale post database tables, enabling translation of post excerpts alongside other translatable post fields.
  • WooCommerce Translations Metabox: Introduced a dedicated metabox for managing WooCommerce product field translations within the multilingual admin interface.
Scroll To Top