• 2.5.1: Fixed the main stylesheet going missing on front-end pages requested with a JSON content type. LH 2015 registers its stylesheet early, on wp_loaded, and skipped that step for requests that looked like API calls; a page request sent with a JSON content type (such as a bot probing /graphql and getting the 404 page) still rendered the theme, but without the stylesheet, and WordPress 6.9.1 and later logged a notice that lh-2015-inline-style depended on the unregistered lh-2015-style. The stylesheet is now also registered when the page's styles are enqueued if the early step was skipped, so every rendered page has it. Also removed an is_robots() check from that early step, which could never be true at that point.
  • 2.5.0: The site footer is now a block template part on every page, not only on block templates. LH 2015 declares block-template-parts support, and footer.php renders the footer part with block_template_part() inside the same footer element core uses for block templates, so classic templates and block templates share one footer. Site admins can see and edit the Header and Footer parts under Appearance > Design; a part edited there is saved per site and overrides the theme's copy. WooCommerce adds its Mini-Cart and Checkout Header parts to that list but otherwise behaves as before. The footer looks the same; #colophon is now a div inside the footer element rather than the footer element itself.
  • 2.4.1: Restored the BuddyPress and WooCommerce styling that Twenty Fifteen used to provide. As a standalone theme LH 2015 is no longer detected as Twenty Fifteen, so BuddyPress (BP Legacy) stopped loading its Twenty Fifteen companion stylesheet and WooCommerce stopped applying its Twenty Fifteen support. The theme now ships buddypress/css/lh-2015.css, which BP Legacy loads automatically as the companion for LH 2015 (a copy of BuddyPress 14.5.2's Twenty Fifteen stylesheet, using the theme's system fonts). It also declares WooCommerce support itself, with the same content wrappers, product gallery zoom, lightbox and slider, and image widths WooCommerce used for Twenty Fifteen.
  • 2.4.0: Reorganised and trimmed LH 2015's code. functions.php now only loads the theme's files from the includes folder: the theme class (main stylesheet and scrollbar colour), content and meta template functions, front-end styles and scripts, small theme settings, and last the setup code that came from Twenty Fifteen. Unused code is gone: the html_tag_schema and lh_2015_return_text functions, the Archive Settings section in the Customizer (its layout and excerpt length settings were never used), the unused custom logo wrapper, the wp_body_open fallback for WordPress before 5.2, the tag cloud widget filter and widget selective refresh support, the call to the retired LH Better Navigation plugin on the posts page, duplicated theme supports and a second comment-reply enqueue. All files now use Unix line endings. Pages look the same.
  • 2.3.0: LH 2015's code now uses its own names throughout instead of Twenty Fifteen's. Functions, filters and the category cache that were prefixed twentyfifteen_ are now prefixed lh_2015_ (the entry footer meta function becomes lh_2015_entry_footer_meta, since lh_2015_entry_meta already prints the header meta). Stylesheet and script handles are now lh-2015-*, with the Customizer colour CSS carried by lh-2015-inline-style. The block pattern category and patterns are now lh-2015, every translatable string uses the lh-2015 text domain, and the bundled setup code lives in includes/theme-setup.php. The theme's main class is now LH_2015_Theme. Existing lh_2015_ filters used by site plugins keep their names. Anything hooking the old twentyfifteen_ filters needs updating. Pages look the same.
  • 2.2.0: Tidied the theme's file structure. Page templates now live in a page-templates folder, and pages already using Plain, Plain No comments, Plain with template notices or Page no breadcrumb are moved to the new paths automatically the first time each site loads after updating. The unused Full Width, Menu, Plain No Image and Single Loop page templates have been removed. The code and scripts that came from Twenty Fifteen now sit alongside the theme's own in the includes and scripts folders. Unused files are gone: the jQuery versions of the menu and image navigation scripts (replaced by the theme's own), the old Internet Explorer stylesheets and HTML5 shim, and Twenty Fifteen's check for WordPress versions older than 4.1. Pages look the same.
  • 2.1.0: LH 2015 no longer bundles or loads any fonts. The Noto Sans, Noto Serif and Inconsolata files Twenty Fifteen shipped are gone, along with the code that loaded them on the site and in the editor. Text uses each device's own system fonts through three CSS variables (–lh-2015-font-serif, –lh-2015-font-sans and –lh-2015-font-mono), which a site can override to use fonts of its own. Most visitors see no change, since these fonts were not being loaded; devices that have Noto installed locally now show their own system font instead. Print styles moved out of the main stylesheet into css/print.css, which browsers only download when printing. The theme download is about a third of its previous size.
  • 2.0.2: Tidied how LH 2015 loads its stylesheets and scripts now that it is a standalone theme. The main stylesheet is registered as lh-2015-style instead of lh-2015-child-style. The Twenty Fifteen code bundled in the theme no longer enqueues the stylesheet a second time only for the theme to hide it again; its inline colour and header CSS now attaches to a style-free handle. Scripts that were enqueued and then removed are no longer enqueued at all: Twenty Fifteen's jQuery menu script, its empty IE stylesheets, and a second copy of Genericons. On image attachment pages the old jQuery keyboard navigation script no longer loads alongside the theme's own version. The skip-link script loads once, deferred, from the theme. The theme's main class is no longer wrapped in a class_exists() check, and the bundled Twenty Fifteen code now always loads, since every site running LH 2015 has been switched to it as a standalone theme. The bundled code's remaining strings now use the lh-2015 text domain. Nothing changes on screen.
  • 2.0.1: Fixes a fatal error on sites where WordPress still recorded Twenty Fifteen as LH 2015's parent theme after 2.0.0. On those sites WordPress kept loading Twenty Fifteen's own functions alongside LH 2015's bundled copy of them. LH 2015 now only loads its bundled copy once WordPress treats it as a standalone theme, so those sites keep working unchanged until their theme setting is updated.
  • 2.0.0: LH 2015 is now a standalone theme and no longer a child of Twenty Fifteen. Everything it used from Twenty Fifteen is now part of the theme: the stylesheet, the fonts, Genericons, the scripts, the Customizer colour schemes and custom header, the template tags and the templates LH 2015 did not already override. Sites keep their menus, logo, colours and Customizer settings, and pages look the same. Twenty Fifteen's widget area is no longer registered at all, the theme loads a single stylesheet instead of a parent and child pair, and all translatable strings use the lh-2015 text domain. The unused Responsive Banner Ads template for single lh-advertisement posts, which loaded scripts from googlecode.com, has been removed; any such posts now use the standard single template.
  • 1.31.2: Theme Check clean-up. The stylesheet header now declares Requires at least (6.7), Tested up to (7.1) and Requires PHP (8.0), and carries a copyright notice. It drops the colour and layout tags that wordpress.org has deprecated, along with accessibility-ready, which the theme has never been reviewed for. Every translatable string now uses the theme's own lh-2015 text domain: the templates copied from Twenty Fifteen still used twentyfifteen, and the footer menu location used twentysixteen-footer-menu. The events archive and archived posts index headings and descriptions are now translatable too. The Archive Settings Customizer options (archive layout and excerpt length) now sanitise what is saved. Nothing changes on screen for English-language sites.
  • 1.31.1: Removed the old LH email template (lh_email-template.php), which nothing loaded and which carried Princes Park Touch styling. The email signature documentation now describes the one context the theme uses, bp for its BuddyPress email templates.
  • 1.31.0: Tidy-up release. Princes Park Touch's email signature no longer lives in the theme: the BuddyPress, plain BuddyPress and LH email templates now print a generic signature built from the site's name, tagline and address, which a site can replace through the new lh_2015_email_signature filter (ppt-site-specific now supplies PPT's signature, so PPT's emails are unchanged). The small-screen menu button is labelled Menu rather than Menu and widgets. The unused Header Logo Customizer setting is gone (the header uses the standard site logo). Stylesheet paths no longer assume the theme folder names. Two dead files were removed, and several faults found by static analysis were fixed: an excerpt fallback that could never run, an unreachable post-format label, a PHP 8.2 dynamic-property deprecation in the stylesheet loader, stray arguments to remove_filter() and sprintf(), a dead call to the retired LH Cookieless Domain plugin, and trailing whitespace at the end of the events archive template.
  • 1.30.1: Appearance > Widgets now really disappears when no widget areas are registered. The 1.30.0 check called WordPress's remove_theme_support(), which deliberately refuses to remove widget support and silently does nothing, so the Widgets screen stayed. It now uses the lower-level _remove_theme_support(), which WordPress provides for exactly this case. Sites where a plugin still registers a widget area keep the Widgets screen.
  • 1.30.0: Finished removing widgets from LH 2015. When no widget areas are left registered, the theme now also drops WordPress widget support, so Appearance > Widgets disappears; if a plugin still registers an area of its own, widget support and that screen stay. The email templates (the BuddyPress email template, the plain BuddyPress email template and the LH email template) no longer look for the retired LH Email Footer widget area; each now offers an lh_2015_email_footer filter instead, which outputs nothing unless a site plugin adds content. The editor descriptions of the LH 2015 sidebar column and site footer blocks no longer mention widgets.
  • 1.29.0: LH 2015 no longer has any widget areas. The Sidebar Top Widget Area, the Bottom Widget Area and Twenty Fifteen's own sidebar widget area are no longer registered or shown, so the Widgets screen no longer lists them. Content below the page now comes only from the Content footer pattern chosen in the Customizer; with no pattern chosen, nothing is shown there. The sidebar column keeps its primary and social menus. Sites that still had content in a widget area should move it into a synced pattern and choose it as the Content footer pattern.
  • 1.28.0: Each site can now choose a synced pattern to show below the content on every page, above the footer menu, using the new Content footer pattern setting in the Customizer (Content footer section). The setting lists the site's own published synced patterns and is stored per site, so the theme holds no organisation-specific content. While no pattern is chosen, the Bottom Widget Area is shown exactly as before, so sites can move their content into a pattern at their own pace and remove the widgets afterwards. The same content footer appears on pages rendered through a block template.
  • 1.27.2: Renamed the class that keeps page and event titles flush with the content below them, from a name left over from the retired LH Better Navigation plugin to lh-2015-title-flush. Page and event titles look exactly as before.
  • 1.27.1: Removed leftovers from the retired LH Better Navigation plugin. The Page Top Widget Area is no longer registered, since no template has output it since 1.27.0 and its breadcrumbs widget has been deleted; the theme's own breadcrumbs replace it. The stylesheet no longer carries the rules for LH Better Navigation's breadcrumb and related-pages lists, which nothing outputs any more. The rule that removes the bottom margin from page titles is kept for now, because page and event templates still add its class and removing it would change the spacing under their titles.
  • 1.27.0: Breadcrumbs now come from the theme instead of a widget. Pages and events used to get them from a Breadcrumbs block placed in the Page Top Widget Area, and archives, the events archive, games, enquiries and rosters called a function from LH Better Navigation, which is no longer active, so those views showed no breadcrumbs at all. Every one of these templates now calls the theme's own breadcrumbs, which render the core Breadcrumbs block in the same place as before, so archives, games, enquiries and rosters show breadcrumbs again. Pages rendered through a block template, such as governance documents, get the same breadcrumbs above their title. Pages using the Page no breadcrumb template still show none, and the new lh_2015_show_breadcrumbs filter can turn them off anywhere else. The Page Top Widget Area is no longer output by any template, so its Breadcrumbs widget can be removed.
  • 1.26.0: LH 2015 is now a hybrid theme. It stays a child theme of Twenty Fifteen and keeps all of its PHP templates, but it now declares block-templates support, so any post type with a bound block template uses it: a template registered by a plugin (such as the single governance document template from LH Governance Documents), a templates/single-{post_type}.html file in the theme, or one saved from the template editor. Every other view is unchanged. Block templates get the same site chrome through header and footer template parts built from two new theme blocks, LH 2015 sidebar column and LH 2015 site footer, which render the same markup as header.php and footer.php; both templates now call the same shared functions, so there is one source for the chrome. A layout stylesheet, loaded only on block-template pages, gives the main content the same card layout as the classic templates at every screen width, and post titles and content in block templates pick up Twenty Fifteen's entry-title and entry-content styling. The theme now has a minimal theme.json (660px content width, no block gap, no default duotone presets, palette and font sizes still from Twenty Fifteen), and re-adds the classic theme button styles that WordPress drops once a theme has a theme.json, so existing pages look the same. The sticky sidebar script now also works on block-template pages, and the dead IE 8 html5.js shim was removed from header.php.