madvault/slswc-client

SDK for WordPress plugins and themes to check updates, manage licenses, and enforce DRM against an SLSWC-powered license server.

Maintainers

Package info

github.com/digitalduz/slswc-client

Issues

pkg:composer/madvault/slswc-client

Statistics

Installs: 24

Dependents: 0

Suggesters: 0

Stars: 0

1.0.0 2026-05-24 05:53 UTC

This package is not auto-updated.

Last update: 2026-05-25 15:00:54 UTC


README

PHP SDK for WordPress plugins and themes to check for updates, manage licenses, and enforce DRM against an SLSWC-powered license server.

Installation

composer require slswc/client

Usage

Plugin Integration

use SLSWC\Client\Plugin;

add_action( 'plugins_loaded', function () {
    $client = Plugin::get_instance(
        'https://your-license-server.com/',
        __FILE__,
        array(
            'license_key' => get_option( 'my_plugin_license_key', '' ),
        )
    );
    $client->init_hooks();
}, 11 );

Theme Integration

use SLSWC\Client\Theme;

add_action( 'after_setup_theme', function () {
    $theme = Theme::get_instance(
        'https://your-license-server.com/',
        WP_CONTENT_DIR . '/themes/my-theme',
        array(
            'license_key' => get_option( 'my_theme_license_key', '' ),
        )
    );
    $theme->init_hooks();
} );

Plugin Headers

Add SLSWC headers to your plugin's main file:

/**
 * Plugin Name: My Plugin
 * Version:     1.0.0
 * Text Domain: my-plugin
 *
 * SLSWC:                    plugin
 * SLSWC Documentation URL:  https://example.com/docs
 * SLSWC Compatible To:      6.9
 */

DRM (Optional)

$client = Plugin::get_instance(
    'https://your-license-server.com/',
    __FILE__,
    array(
        'license_key' => get_option( 'my_plugin_license_key', '' ),
        'drm' => array(
            'enabled'      => true,
            'product_name' => 'My Plugin',
        ),
    )
);

Multi-consumer safety

Multiple plugins and themes on the same WordPress install can embed this SDK independently. Each consumer receives its own isolated Plugin / Theme / ApiClient instance, keyed internally by:

  • Plugin::get_instance( $url, $base_file, $args ) — keyed by $base_file (the consumer's main plugin file path).
  • Theme::get_instance( $url, $base_file, $args ) — keyed by $base_file (the consumer's theme directory path).
  • ApiClient::get_instance( $url, $text_domain ) — keyed by $text_domain.

text_domain, DRM option keys (<text_domain>_drm_*), LicenseDetails option key (<text_domain>_license_details), DRM admin notice hooks, and scheduled license-check cron events therefore stay isolated across consumers. There is no shared mutable state between two consumers on the same site.

Consumers are expected to pass a stable $base_file (a plugin's main __FILE__ is ideal) and a unique text_domain per product. Reusing the same text_domain across two consumers will share a registry slot and is unsupported.

Documentation

Full integration guides: licenseserver.io/documentation

License

GPL-2.0-or-later