The minimum viable extension
A Wigmorean extension is just a WordPress plugin. The only thing that makes it special is how it registers with Connect.
<?php
/**
* Plugin Name: Acme Wigmorean Extension
* Version: 1.0.0
*/
if ( ! defined( 'ABSPATH' ) ) exit;
add_filter( 'wigmorean_connect_extensions', function( $exts ) {
$exts['acme-extension'] = [
'slug' => 'acme-extension',
'label' => 'Acme Extension',
'description' => 'Adds Acme-specific tooling.',
'version' => '1.0.0',
'main_file' => plugin_basename( __FILE__ ),
];
return $exts;
} );
Once registered, your extension appears on the Extensions tab of Connect with its own install/activate controls.
Using the Credentials Vault
If your extension needs API keys or tokens, register a service group and read via the Vault — never get_option() in plain text:
add_filter( 'wigmorean_credentials_services', function( $services ) {
$services['acme'] = [
'label' => 'Acme API',
'fields' => [ 'api_key' => [ 'label' => 'API Key', 'required' => true ] ],
];
return $services;
} );
// Read it when you need it:
$key = Wigmorean_Connect_Credentials::get( 'acme.api_key' );
Respecting SafeGuard
If your extension shouldn't run alongside another plugin (a conflict), register that:
add_filter( 'wigmorean_safeguard_conflicts', function( $conflicts ) {
$conflicts['acme-extension'] = [
'hard' => [ 'other-conflicting-plugin' ], // red: block install
'soft' => [ 'related-plugin' ], // yellow: warn
];
return $conflicts;
} );
Shipping updates
Extensions can use Connect's updater or ship their own. To use Connect's:
add_filter( 'wigmorean_connect_update_manifest', function( $manifest, $slug ) {
if ( $slug !== 'acme-extension' ) return $manifest;
return [
'version' => '1.1.0',
'package_url' => 'https://acme.com/downloads/acme-extension-1.1.0.zip',
'changelog' => 'https://acme.com/changelog',
];
}, 10, 2 );
Connect will surface updates the same way it does for first-party products — with the auto-update toggle, SafeGuard preflight, and changelog display.
Following Wigmorean conventions
To feel native to the ecosystem, follow these conventions:
- Prefix all functions and classes with
wigmorean_or your brand prefix - Hook admin pages under Wigmorean menu, not your own top-level menu
- Use the Wigmorean admin CSS tokens (
--rust,--cream, etc.) so your screens don't look out of place - Log significant actions to the Wigmorean activity log via
do_action( 'wigmorean_activity', $event )