Extension License Management #
New in v1.2.0
DDLS Core provides a unified system for managing license keys for installed DDLS extensions. This replaces the previous pattern where each extension displayed its own admin notice.
Core Licenses Section #
The Core Licenses section in the Admin Shell is a dedicated screen for entering and viewing the license key for each installed DDLS extension.
URL: admin.php?page=dmsi-ddls§ion=core-licenses
From this screen an admin can:
- See all installed DDLS extensions and their license status.
- Enter or update a license key for any extension.
- See expiry dates and activation counts.
Extension Status Widget #
The Dashboard’s Extension Status widget shows a summary of all installed DDLS extensions and their current license state. Unlicensed or expired extensions are highlighted so administrators can act without leaving the Dashboard.
Consolidated Admin Notice #
In v1.0.x, each extension with a license issue displayed its own separate admin notice, which led to multiple notices appearing simultaneously. In v1.2.0 a single consolidated admin notice covers all extension license issues. The notice links to the Core Licenses section where all issues can be resolved in one place.
Registering with the Extension Registry #
Extensions register themselves with Core’s extension registry so they appear in the Core Licenses section and the Extension Status widget. Registration uses a WordPress action hook:
add_action( 'dmsilm_register_extensions', function( $registry ) {
$registry->register( array(
'id' => 'my-extension',
'name' => 'My DDLS Extension',
'version' => MY_EXT_VERSION,
'license_key' => get_option( 'my_ext_license_key', '' ),
) );
} );
Registry fields:
| Key | Type | Description |
|---|---|---|
id | string | Unique extension identifier (use your plugin slug) |
name | string | Human-readable extension name displayed in the UI |
version | string | Current version of your extension |
license_key | string | The stored license key (from your option); empty string if not yet entered |
Core handles displaying the license status, linking to activation, and showing the consolidated notice. Your extension is only responsible for storing its own license key option and providing it to the registry.
Related Topics #
- [Available Sections](#)
- [Extension Architecture Overview](#)
- [Dashboard and Reports](#)
Summary #
You now understand:
- Extensions are separate WordPress plugins that integrate with DDLS Core via filters and actions
- Admin shell sections registered via
dmsilm_admin_shell_sections; views registered viadmsilm_admin_shell_pages(single-arg filter; includesectionkey in each page array) - Settings tabs registered via
dmsilm_settings_tabs; content and save handled viadmsilm_settings_tab_content_{slug}anddmsilm_settings_save_{slug}actions - Order processor filters:
dmsilm_license_data_before_create(3 params),dmsilm_subscription_data_before_create(4 params),dmsilm_support_contract_data_before_create(4 params) - License type lifecycle hooks:
_createdand_updatedpass($type_id, $data);_deletedpasses only($type_id) - Shared assets:
dmsilm-chartjsscript handle and CSS design tokens via--dmsilm-*custom properties - Extensions register with the Core Licenses extension registry via
dmsilm_register_extensions
Next Steps #
- Review [Admin Shell](#) (Part 15) for the shell architecture your sections and views hook into
- See [License Types](#) (Part 13) for the data model that order processor hooks interact with
- Consult the CODE-MAP for the full internal API surface
Document Created: 2026-03-22 | Updated: 2026-03-22 for v1.2.2
Category: Extension Integration (ddls-extension-integration)
Total Docs: 7
Status: Ready for BetterDocs import
