2.7 KiB
Feature Flags
Features inside the wc-admin
repository can be in various states of completeness. In addition to the development copy of wc-admin
, feature plugin versions are bundled, and code is merged to WooCommerce core. To provide a way for improved control over how these features are released in these different environments, wc-admin
has a system for feature flags.
We currently support the following environments:
Environment | Description |
---|---|
development | Development - All features should be enabled in development. These flags are also used in both JS and PHP tests. Ran using npm start . |
plugin | Plugin - A packaged release of the featured plugin, for GitHub WordPress.org. Ran using npm run-script build:release . |
core | Core - assets/files ready and stable enough for core merge. @todo No build process exists yet. |
Adding a new flag
Flags can be added to the files located in the config/
directory. Make sure to add a flag for each environment and explicitly set the flag to false.
Please add new feature flags alphabetically so they are easy to find.
Basic Use - Client
The window.wcAdminFeatures
constant is a global variable containing the feature flags.
Instances of window.wcAdminFeatures
are replaced during the webpack build process by using webpack's define plugin. Using webpack
for this allows us to eliminate dead code when making minified/production builds (plugin
, or core
environments).
To check if a feature is enabled, you can simplify check the boolean value of a feature:
{ window.wcAdminFeatures[ 'activity-panels' ] && <ActivityPanel /> }
We also expose CSS classes on the body
tag, so that you can target specific feature states:
<body class="wp-admin woocommerce-page woocommerce-feature-disabled-analytics woocommerce-feature-enabled-activity-panels ....">
Basic Use - Server
Feature flags are also available via PHP. To ensure these are consistent with the built client assets, includes/feature-flags.php
is generated by the plugin build process or npm start
. Do not edit includes/feature-flags.php
directly.
To check if a feature is enabled, you can use the wc_admin_is_feature_enabled()
:
if ( wc_admin_is_feature_enabled( 'activity-panels' ) ) {
add_action( 'admin_header', 'wc_admin_activity_panel' );
}