> For the complete documentation index, see [llms.txt](https://whoisandywhite.gitbook.io/porterwp/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://whoisandywhite.gitbook.io/porterwp/release-notes.md).

# PorterWP 1.4.101

PorterWP 1.4.101 supports WordPress 6.4 or newer, is tested through WordPress 7.1, and requires PHP 8.2 or newer.

## What changed

* White-label licence notices now show **Manage PorterWP licence** and open the Account page. They no longer link to the pricing page that white-label mode hides.
* When activation is required, the notice shows **Activate PorterWP** and opens the activation screen, including for white-label licences.

## Previous releases

### PorterWP 1.4.100

* Updated Freemius SDK to the latest version.

### PorterWP 1.4.99

PorterWP 1.4.99 makes **Automatic** include published posts only. It supports WordPress 6.4 or newer, is tested through WordPress 7.1, and requires PHP 8.2 or newer.

#### What changed

* **Automatic** uses `publish` for filter options and the signed scope applied to matching result queries after submission.
* Custom statuses remain available from the statuses registered on each WordPress installation. Select one explicitly when needed.
* The block explains the setting directly: “Selecting Automatic will include published posts only. To use a custom status, select it here and set the Query Loop to match.”

#### After updating

Existing blocks without a selected status now use published posts only. On a page that filters a custom status, select that status in the Filters block and keep the Query Loop configured to match. The setting does not change the initial, unfiltered Query Loop or any posts' statuses.

Refresh cached pages after updating so their forms contain the current signed settings. See [Premium Filters block](/porterwp/features/premium-filters-block.md#post-status-scope) for configuration details.

### PorterWP 1.4.98

* Added **Settings > Post status** for Published or an eligible publicly queryable custom status.
* Applied the selected status to taxonomy, meta, archive-month, and author options, lookup cache keys, and signed result-query scopes.
* Included taxonomy terms whose only matching posts have a custom past status.
* In this version, **Automatic** included published posts and safe past statuses registered through `Porter_PastStatusUpdater`. Version 1.4.99 replaces that default with published posts only.
* Fixed multiple Filters blocks using the default template on one page.
* Older theme templates that omit the settings argument to `generate_filters()` use the block's saved settings.

### PorterWP 1.4.97

* Inherited filters recognise the assigned posts page and query news posts instead of pages.
* Taxonomy, meta, date, and author options include published posts and safe publicly queryable past statuses registered for the relevant post type, including taxonomy terms with zero stored counts.
* The tested WordPress version was updated to 7.1.

### PorterWP 1.4.96

* Restored explicitly configured archives for admin-only post types without enabling search or navigation visibility.
* Porter rewrite rules refresh after plugin updates.

### PorterWP 1.4.95

PorterWP 1.4.95 is a security, compatibility and performance release. It supports WordPress 6.4 or newer, is tested through WordPress 7.0.3, and requires PHP 8.2 or newer.

#### Upgrade summary

The release keeps the existing JSON configuration format, filter form parameter names, theme-template entry points, `Porter_QueryFilter_Base` subclass API and `Porter_PastStatusUpdater` subclass API. Existing sites can update without rebuilding their Porter configuration.

There are three intentional security-related changes to check on bespoke integrations:

1. Filter forms now emit signed request-schema fields. Theme templates that call `generate_filters()` receive them automatically. Hard-coded unsigned links continue to support bounded public taxonomy, post-type, search, archive-month, author and sorting filters; sensitive meta and event-date dimensions need a rendered or registered schema. Legacy geolocation remains available only through its strict marker, distance and callback checks.
2. Manual past-status maintenance is POST-only and requires both a nonce and the configured capability. Old `?updateEvent=1` or `?migrateEvent=1` links no longer run an operation.
3. `Porter_QueryFilter_Base` now matches its target class as an exact CSS token. Ensure the Query Loop contains the complete value assigned to `$className`.

#### Security

* Premium filter requests are checked against signed, route-bound schemas and bounded server-side legacy registrations.
* Query inputs are depth-, length- and clause-limited, and only viewable post types and taxonomies are accepted.
* Configured meta keys are allowlisted. Meta and event-date filters cannot be introduced by an arbitrary query string.
* Filter copy and control output is escaped for its HTML context.
* UK postcode lookups use safe, bounded remote requests, positive and negative caching, and miss-rate limiting.
* Past-status manual actions require `manage_options` by default and a valid action nonce.

See [Filter request security](/porterwp/features/premium-filters-block/premium-filter-security.md) for the complete compatibility model.

#### Correctness and compatibility

* Boolean theme-support entries now register their named feature correctly.
* Inherited query filtering runs early enough to affect the main query, while non-inherited Query Loops remain scoped by query ID.
* Sorting-only filter submissions, post-type controls, taxonomy controls and existing `theme.json` block CSS now apply correctly.
* Past-status decisions run after core meta and ACF fields are saved, use the WordPress site timezone, and only transition published or already-past content.
* ACF-backed integrations now check their required API and degrade gracefully. Local field groups can still register when `acf_add_local_field_group()` is available, while missing PRO APIs disable only dependent option-page and custom-block features and produce an admin notice.
* Bundled translations load from the plugin text domain using WordPress locale filenames.

#### Performance and lifecycle

* Configuration, block, style and include caches are scoped to the active site/theme and accept valid empty results.
* Cache signatures track relevant config and source metadata; the settings object-cache entry expires after one day by default.
* Theme PHP discovery validates cached paths and loads only readable `.php` files inside the configured include root.
* Past-status cron work is batched and avoids rewriting unchanged posts.
* Site Editor collection previews use short-lived, permission-checked response caches and lightweight ACF placeholders.
* Post-type, taxonomy and past-status rewrite changes contribute to one coordinated soft flush. Deactivation removes scheduled status hooks and invalidates Porter rewrite rules.

#### Packaging

PorterWP 1.4.95 is licensed under GPLv3 or later, includes Freemius SDK 2.13.4, and adds a deterministic release builder. See [Release builds](/porterwp/tooling/release-process.md).

#### Recommended post-update checks

* Submit each bespoke filter template once and confirm its complete `FormData` is preserved by custom JavaScript.
* Exercise any theme-owned AJAX filter handler with its nonce, successful response and empty-results response.
* If a `Porter_QueryFilter_Base` subclass previously relied on a partial class-name match, add the exact class token to its Query Loop.
* Replace bookmarks or admin buttons that invoke past-status maintenance through GET with the documented nonce-backed POST form.

No manual permalink flush is normally required.
