[Go to site: main page, start]

Retiring stable feature flags in WooCommerce 11.1

Retiring stable WooCommerce Admin feature flags in WooCommerce 11.1

WooCommerce 11.1 retires a set of stable WooCommerce Admin feature flags from the normal feature configuration pipeline.

These features are no longer experimental or optional, so WooCommerce now loads them directly instead of treating entries in core.json, development.json, or window.wcAdminFeatures as the source of truth for whether the feature should be available.

This change should not remove functionality from stores. The affected features continue to be available. To preserve backward compatibility, WooCommerce 11.1 includes deprecated PHP and JavaScript compatibility shims for existing checks.

For example, calls such as:

Features::is_enabled( 'launch-your-store' );

Features::exists( 'customize-store' );

Direct JavaScript access such as:

window.wcAdminFeatures[ 'launch-your-store' ];

These will continue to return compatibility values for now. However, these checks are deprecated and will emit deprecation warnings. The compatibility layer is intended to give extension developers time to remove feature-flag-based gates before the shims are removed in a future WooCommerce version.

Who is affected?

This affects extensions and custom code that check retired WooCommerce Admin feature flags before loading UI, routes, tasks, recommendations, or other WooCommerce Admin behavior.

Developers should audit their code for usage of:

Features::is_enabled()

Features::exists()

Features::get_available_features()

Features::get_optional_feature_options()

Features::enable()

Features::disable()

window.wcAdminFeatures

– the woocommerce_admin_features filter when used to control stable WooCommerce Admin features

In most cases, checks for retired stable feature flags can be removed because the related feature is now treated as stable and available.

Affected feature flags

The retired compatibility shims include the following feature slugs:

activity-panels

analytics

analytics-scheduled-import

experimental-iapi-mini-cart

coupons

core-profiler

customize-store

customer-effort-score-tracks

import-products-task

experimental-fashion-sample-products

shipping-smart-defaults

shipping-setting-tour

homescreen

marketing

mobile-app-banner

onboarding

onboarding-tasks

pattern-toolkit-full-composability

payment-gateway-suggestions

product-custom-fields

printful

remote-inbox-notifications

remote-free-extensions

shipping-label-banner

subscriptions

transient-notices

wc-pay-promotion

wc-pay-welcome-page

woo-mobile-welcome

launch-your-store

Developers should use the underlying option or supported API when they need to check behavior that remains configurable.

About woocommerce_admin_features

The woocommerce_admin_features filter should no longer be used to control retired stable WooCommerce Admin features.

WooCommerce now loads these features directly, so removing a retired stable slug from the filtered feature list is not a supported way to disable the underlying feature behavior. Deprecated compatibility lookups may still reflect legacy filtered values while the shim exists, but those lookups now emit deprecation warnings and should be removed.

Extensions that currently use woocommerce_admin_features to gate stable WooCommerce Admin features should migrate away from that pattern and use the actual option or API for behavior that remains configurable.

Deprecated helpers

The following legacy helpers are also deprecated:

Features::get_optional_feature_options();

Features::enable();

Features::disable();

New code should avoid using WooCommerce Admin feature flags as extension points for stable feature behavior.

Timeline

These compatibility shims are deprecated in WooCommerce 11.1 and are planned for removal in a future WooCommerce version.


One response to “Retiring stable feature flags in WooCommerce 11.1”

  1. “Extensions that currently use woocommerce_admin_features to gate stable WooCommerce Admin features should migrate away from that pattern and use the actual option or API for behavior that remains configurable.”

    Kinda wild that this post doesn’t include links to guides/instructions on this. My store has disabled a lot of features via woocommerce_admin_features, and suddenly they’re all active after upgrading from 11.0.1 to 11.1.0. I had to use Claude Code to apply a hotfix to make sure our site remained the same after the upgrade. I’ve copied the result below, please could you confirm if this is the correct approach now that woocommerce_admin_features is substantially different?

    — Claude Code:

    https://gist.github.com/dcx15/45ec976a0aaf0018e3c71437e4081cbc

    WooCommerce 11.1 retired the WC Admin feature flags, so add_filter(‘woocommerce_admin_features’, ‘__return_empty_array’) in wc.php now does very little. I’ve added a replacement in mu-plugins/wc.php.

    What changed in 11.1 (I compared against the 11.0.1 source)
    – Notes panel: in 11.0.1 the header panel (Inbox, notes and the unread dot) only showed when the activity-panels flag was on, so emptying the list hid it. 11.1 removed that check, and the panel now shows on every WC Admin page except Settings.
    – Everything else: Features::load_features() now starts 16 feature classes on every admin request, whatever the filter returns. Besides the panel, that brought back more than you’d noticed:
    – a Marketing top-level menu, with Coupons moved into it
    – the Home screen
    – Launch Your Store
    – the effort-score surveys
    – the shipping label banner
    – onboarding tasks and payment suggestions
    – Still covered by the old filter: Analytics and the store alerts. The filter is kept, and I’ve updated its comment.
    – No new notes are being fetched. woocommerce_show_marketplace_suggestions is already no, so no notes come from WooCommerce.com. The notes you’re seeing are made locally by WooCommerce and were always being created; one arrived today with the update. They were just hidden until now.

    The fix
    1. Removing the features’ hooks: at init 4, right after load_features() runs, it removes every hook those classes registered. That puts things back how they were on 11.0.1.
    – It has to run before WooCommerce registers its post types at init 5, or Coupons has already moved.
    – It checks the four helper classes the features start up, and the anonymous functions they register.
    2. Hiding the panel in the browser: a small inline script attached before the WC Admin app loads. It replaces the panel’s display so it renders nothing. The panel doesn’t load at all, so it also stops asking the server for notes.

Leave a Reply

Your email address will not be published. Required fields are marked *