The SEO Framework · KB

★︎ Start with TSF
  • Extensions
  • Documentation
  • Pricing
  1. Home
  2. Knowledge Base
  3. Constant Reference for Extension Manager

Constant Reference for Extension Manager — Contents

  • User-definable constants
    • Forced extensions
    • Hidden extensions
    • Admin role
    • Extension settings role
    • Forced licensing
    • API version
    • Dev API
  • Predefined constants

Constant Reference for Extension Manager

Published on March 9, 2026

Constants are referable terms in the code that can not be altered.

Below you’ll find the constants as defined or used in the code as of Extension Manager v2.7.3.

To learn the basics, please read the PHP manual on using constants. For TSF core constants, see the TSF constant reference.

User-definable constants

The following constants can be defined by the user in wp-config.php or a mu-plugin. These constants should not be defined in theme files. They shouldn’t be defined in a plugin either, as there might be load-sequence issues that cause fatal errors.

Below you’ll find examples.

Force extension activation states

Forced extensions can not be toggled via the WordPress dashboard. When you remove a slug from this constant, the extension reverts to whatever state the user set before.

/**
 * Forces extensions to an activation state.
 * When the slug is set, it won't allow the extension's state
 * to be altered via the interface.
 * When the slug is unset, the extension's state reverts to
 * whatever it was before.
 *
 * @since 2.0.0
 * @param bool|array Must be false if not an array.
 */
define( 'TSF_EXTENSION_MANAGER_FORCED_EXTENSIONS', [
	'local' => false, // forced deactivated.
	'focus' => true,  // forced activated.
] );

Hide extensions from the dashboard

Hidden extensions don’t appear in the Extension Manager overview and can not be toggled. If a user already activated an extension before you hide it, combine this with TSF_EXTENSION_MANAGER_FORCED_EXTENSIONS to deactivate it — or define this constant before activating Extension Manager.

/**
 * Hides extensions from the dashboard.
 * This also prevents changing activation states.
 *
 * @since 2.0.0
 * @param bool|array Must be false if not an array.
 */
define( 'TSF_EXTENSION_MANAGER_HIDDEN_EXTENSIONS', [ 'local', 'focus' ] );

Change the overview page capability

Using this incorrectly exposes your site to security risks. We assume the capability supplied here is lower than the webmaster’s — for example, in a multisite environment. Proceed with caution.

/**
 * The capability required to access the extension overview page.
 *
 * @since 2.0.0
 * @param string The capability. Default 'manage_options'.
 */
define( 'TSF_EXTENSION_MANAGER_MAIN_ADMIN_ROLE', 'manage_network' );

Change the extension settings capability

Using this incorrectly exposes your site to security risks. We assume the capability supplied here is lower than the webmaster’s — for example, in a multisite environment. Proceed with caution.

/**
 * The capability required to access the extension settings.
 *
 * @since 2.4.0
 * @param string The capability. Default 'manage_options'.
 */
define( 'TSF_EXTENSION_MANAGER_EXTENSION_ADMIN_ROLE', 'edit_posts' );

Force API license activation

This constant blocks manual activation and enables automatic licensing instead. Extension Manager checks the license at most once every five minutes. When the license is invalid or expired, it retries indefinitely and warns the user each time.

Removing this constant does not immediately disconnect the site. The license validity is checked at inconsistent intervals. To disconnect immediately, set empty strings for both values. After disconnection, a five-minute timeout is imposed before reconnecting.

/**
 * Blocks manual API activation, and sets automatic API activation.
 * When the input changes, it'll be switched automatically.
 *
 * @since 2.0.0
 * @param bool|array False, or the key and email.
 */
define( 'TSF_EXTENSION_MANAGER_API_INFORMATION', [
	'email' => 'j.doe@example.com',
	'key'   => '*****',
] );

Change the remote API version

This is for development only. Version numbers aren’t available publicly.

/**
 * @since 2.1.0
 * @param string The API version number.
 */
define( 'TSF_EXTENSION_MANAGER_API_VERSION', '2.2' );

Enable the development API endpoint

This is for development only. You need a secret key to enable it, which isn’t available publicly. When the key doesn’t match our system’s, this value is ignored and the public API is used instead.

/**
 * @since 2.1.0
 * @param bool|string The secret key.
 */
define( 'TSF_EXTENSION_MANAGER_DEV_API', false );

Predefined constants

Extension Manager defines various constants itself. You can refer to these in your code, but Extension Manager isn’t meant to be extended further. The extensions within Extension Manager define their own constants, which are internal only and not documented.

/**
 * Tells the world the plugin is present and to be used.
 *
 * @since 2.5.0
 */
define( 'TSF_EXTENSION_MANAGER_PRESENT', true );
/**
 * The plugin version.
 *
 * 3 point: x.x.y; x.x is major; y is minor.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_VERSION', '2.7.3' );
/**
 * The plugin database version.
 *
 * Used for upgrade comparing and as a key for environmental checking.
 *
 * @since 1.5.0
 */
define( 'TSF_EXTENSION_MANAGER_DB_VERSION', '1600' );
/**
 * The plugin file, absolute unix path.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_PLUGIN_BASE_FILE', __FILE__ );
/**
 * The plugin basename relative to the plugins directory.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_PLUGIN_BASENAME', plugin_basename( TSF_EXTENSION_MANAGER_PLUGIN_BASE_FILE ) );
/**
 * The plugin's bootstrap folder location.
 *
 * @since 1.5.0
 */
define( 'TSF_EXTENSION_MANAGER_BOOTSTRAP_PATH', dirname( TSF_EXTENSION_MANAGER_PLUGIN_BASE_FILE ) . DIRECTORY_SEPARATOR . 'bootstrap' . DIRECTORY_SEPARATOR );
/**
 * The plugin folder URL. Used for calling browser files.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_DIR_URL', plugin_dir_url( TSF_EXTENSION_MANAGER_PLUGIN_BASE_FILE ) );
/**
 * The plugin folder absolute path. Used for calling PHP files.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_DIR_PATH', dirname( TSF_EXTENSION_MANAGER_PLUGIN_BASE_FILE ) . DIRECTORY_SEPARATOR );
/**
 * The plugin class folder absolute path.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_DIR_PATH_CLASS', TSF_EXTENSION_MANAGER_DIR_PATH . 'inc' . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR );
/**
 * The plugin trait folder absolute path.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_DIR_PATH_TRAIT', TSF_EXTENSION_MANAGER_DIR_PATH . 'inc' . DIRECTORY_SEPARATOR . 'traits' . DIRECTORY_SEPARATOR );
/**
 * The plugin function folder absolute path.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_DIR_PATH_FUNCTION', TSF_EXTENSION_MANAGER_DIR_PATH . 'inc' . DIRECTORY_SEPARATOR . 'functions' . DIRECTORY_SEPARATOR );
/**
 * The plugin compatibility folder absolute path.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_DIR_PATH_COMPAT', TSF_EXTENSION_MANAGER_DIR_PATH . 'inc' . DIRECTORY_SEPARATOR . 'compat' . DIRECTORY_SEPARATOR );
/**
 * The plugin extensions base path.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_EXTENSIONS_PATH', TSF_EXTENSION_MANAGER_DIR_PATH . 'extensions' . DIRECTORY_SEPARATOR );
/**
 * The plugin options base name.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_SITE_OPTIONS', 'tsf-extension-manager-settings' );
/**
 * The active extensions options base name.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_ACTIVE_EXTENSIONS_OPTIONS', 'tsf-extension-manager-active-extensions' );
/**
 * The extension options base name.
 *
 * @since 1.0.0
 */
define( 'TSF_EXTENSION_MANAGER_EXTENSION_OPTIONS', 'tsf-extension-manager-extension-settings' );
/**
 * The extension post meta options base name.
 * Has an underscore to hide it from custom fields.
 *
 * @since 1.5.0
 */
define( 'TSF_EXTENSION_MANAGER_EXTENSION_POST_META', '_tsfem-extension-post-meta' );
/**
 * The extension term meta options base name.
 * Has an underscore to conform to TSF_EXTENSION_MANAGER_EXTENSION_POST_META.
 *
 * @since 1.5.0
 */
define( 'TSF_EXTENSION_MANAGER_EXTENSION_TERM_META', '_tsfem-extension-term-meta' );
/**
 * The extension options stale base name.
 *
 * @since 1.3.0
 */
define( 'TSF_EXTENSION_MANAGER_EXTENSION_STALE_OPTIONS', 'tsf-extension-manager-extension-s-settings' );
/**
 * The expected plugin slug.
 *
 * @since 2.0.0
 */
define( 'TSF_EXTENSION_MANAGER_PLUGIN_SLUG', 'the-seo-framework-extension-manager' );
/**
 * The updater cache key.
 *
 * @since 2.0.0
 */
define( 'TSF_EXTENSION_MANAGER_UPDATER_CACHE', 'tsfem-updater-cache' );
/**
 * The DL/update URI.
 *
 * @since 2.0.0
 */
define( 'TSF_EXTENSION_MANAGER_DL_URI', 'https://dl.theseoframework.com/' );
/**
 * The Premium URI (global).
 *
 * @since 2.0.0
 */
define( 'TSF_EXTENSION_MANAGER_PREMIUM_URI', 'https://premium.theseoframework.com/' );
/**
 * The Premium URI (EU).
 *
 * @since 2.1.0
 */
define( 'TSF_EXTENSION_MANAGER_PREMIUM_EU_URI', 'https://eu.theseoframework.com/' );
/**
 * The Premium URI (WCM).
 *
 * @since 2.6.3
 */
define( 'TSF_EXTENSION_MANAGER_PREMIUM_WCM_URI', 'https://wcm.theseoframework.com/' );
Filed Under: Developers, Customization, Extension Manager

Related articles

  • Developers

    • Action Reference for The SEO Framework
    • Constant reference for The SEO Framework
    • Using Filters in WordPress
    • Filter reference for The SEO Framework
    • Headless mode
  • Extension Manager

    • What is Troy Client?
    • How to install Extension Manager

Commercial

The SEO Framework
Trademark of CyberWire B.V.
Leidse Schouw 2
2408 AE Alphen a/d Rijn
The Netherlands
KvK: 83230076
BTW/VAT: NL862781322B01

Twitter  GitHub

Professional

Pricing
About
Support
Terms and Conditions
Refund Policy

Editorial

Knowledge Base
Blog
Feature Highlights
Privacy Policy

Practical

TSF on WordPress
TSF on GitHub
TSFEM on here
TSFEM on GitHub
Deploy Troy
TSF Changelog
TSFEM Changelog

Happy customers in 2026 › The SEO Framework