Addon Development
Addon Structure
my-addon/
├── my-addon.php # Main plugin file
├── inc/
│ ├── class-my-addon.php # Main addon class
│ ├── admin-pages/ # Admin interface
│ ├── models/ # Custom data models
│ └── integrations/ # Third-party integrations
├── assets/
│ ├── js/
│ └── css/
└── templates/ # Template files
Main Addon File Template
<?php
/**
* Plugin Name: My Ultimate Multisite Addon
* Description: Custom addon for Ultimate Multisite
* Version: 1.0.0
* Author: Your Name
* Requires PHP: 7.4
* Ultimate Multisite: 2.0.0
*/
namespace My_Addon;
// Exit if accessed directly
defined('ABSPATH') || exit;
// Define constants
define('MY_ADDON_VERSION', '1.0.0');
define('MY_ADDON_PLUGIN_FILE', __FILE__);
define('MY_ADDON_PATH', plugin_dir_path(__FILE__));
define('MY_ADDON_URL', plugin_dir_url(__FILE__));
// Check if Ultimate Multisite is active
add_action('plugins_loaded', function() {
if (!class_exists('WP_Ultimo\WP_Ultimo')) {
add_action('admin_notices', function() {
echo '<div class="notice notice-error"><p>';
echo 'My Addon requires Ultimate Multisite to be installed and activated.';
echo '</p></div>';
});
return;
}
// Initialize addon
My_Addon::get_instance();
});
/**
* Main addon class
*/
class My_Addon {
use \WP_Ultimo\Traits\Singleton;
/**
* Initialize the addon
*/
public function init() {
// Load dependencies
$this->load_dependencies();
// Setup hooks
$this->setup_hooks();
// Initialize components
$this->init_components();
}
/**
* Load required files
*/
private function load_dependencies() {
require_once MY_ADDON_PATH . 'inc/class-my-addon.php';
}
/**
* Setup WordPress hooks
*/
private function setup_hooks() {
// Activation/deactivation
register_activation_hook(MY_ADDON_PLUGIN_FILE, [$this, 'activate']);
register_deactivation_hook(MY_ADDON_PLUGIN_FILE, [$this, 'deactivate']);
// Ultimate Multisite hooks
add_action('wu_checkout_completed', [$this, 'on_checkout_completed'], 10, 3);
add_filter('wu_checkout_form_fields', [$this, 'add_custom_fields'], 10, 2);
}
/**
* Initialize addon components
*/
private function init_components() {
// Initialize admin pages, models, etc.
}
/**
* Plugin activation
*/
public function activate() {
// Create custom tables, set options, etc.
$this->create_custom_table();
update_option('my_addon_version', MY_ADDON_VERSION);
}
/**
* Plugin deactivation
*/
public function deactivate() {
// Cleanup if needed
}
/**
* Handle checkout completion
*/
public function on_checkout_completed($payment, $customer, $membership) {
// Custom logic when checkout completes
$this->send_welcome_email($customer);
$this->setup_customer_account($customer, $membership);
}
/**
* Add custom checkout fields
*/
public function add_custom_fields($fields, $form) {
$fields['company_size'] = [
'type' => 'select',
'title' => 'Company Size',
'options' => [
'small' => '1-10 employees',
'medium' => '11-100 employees',
'large' => '100+ employees'
],
'required' => false
];
return $fields;
}
}