Getting Started with Hooks
Hooks are a powerful extensibility mechanism in Mumara Campaigns that allow you to execute custom code when specific events occur within the application. They provide a way to extend and customize the platform's behavior without modifying core files.
What are Hooks?
Hooks are callback functions that get executed when associated events occur in Mumara Campaigns. They enable you to:
- Extend functionality - Add custom logic to existing features
- Integrate with external systems - Send data to third-party services when events occur
- Customize the interface - Inject custom HTML, CSS, or JavaScript into pages
- Automate workflows - Trigger actions based on system events
- Build add-ons - Create modular extensions that plug into the core application
How Hooks Work
The hooks system follows a simple publish-subscribe pattern:
- Registration - You register a callback function to a specific hook name
- Execution - When the corresponding event occurs, all registered callbacks are executed
- Priority - Multiple callbacks on the same hook execute in priority order (lower numbers first)
// Register a hook
add_hook('AddContact', 1, function($vars) {
// Your custom code here
// $vars contains data about the event
});
Hook Types
Mumara Campaigns provides two main categories of hooks:
Module Hooks
Module hooks fire when specific actions occur within the application, such as:
- Contact operations (add, edit, delete)
- List management
- Campaign events (start, pause, complete)
- Domain and SMTP configuration changes
- User management actions
These hooks are ideal for:
- Syncing data with external CRMs
- Triggering notifications
- Logging custom audit trails
- Implementing business logic
Output Hooks
Output hooks allow you to inject content into specific locations on pages:
HeadTop/HeadEnd- Add stylesheets or meta tagsBodyTop/BodyEnd- Inject scripts or HTMLFooter- Add footer contentPrimaryMenu- Extend navigationAlertBar- Display custom alerts
These hooks are perfect for:
- Adding custom stylesheets or scripts
- Displaying notifications or banners
- Extending the user interface
- Injecting analytics or tracking code
File Location
Hook files are stored in the /includes/hooks/ directory. You can create new PHP files in this directory to register your custom hooks.
# Create a new hook file
touch /path/to/mumara/includes/hooks/myhooks.php
An example.php file is provided in the hooks directory as a reference template.
Quick Example
Here's a simple example that logs contact additions to a file:
<?php
// File: includes/hooks/contact-logger.php
add_hook('AddContact', 1, function($vars) {
$logData = [
'timestamp' => date('Y-m-d H:i:s'),
'contact_id' => $vars['subscriber_id'] ?? 'unknown',
'list_id' => $vars['list_id'] ?? 'unknown',
'action' => 'contact_added'
];
$logLine = json_encode($logData) . PHP_EOL;
file_put_contents(storage_path('logs/contacts.log'), $logLine, FILE_APPEND | LOCK_EX);
});
Execution Modes
Hooks can be executed in two modes:
Synchronous Execution
The hook executes immediately and blocks until completion:
listen_hook('AddContact', $data);
Asynchronous Execution
The hook is queued and executes in the background:
run_hook_in_background('AddContact', $data);
Background execution is useful for time-consuming operations that shouldn't delay the user's request.
Best Practices
- Use unique function names - Prefix your functions to avoid naming conflicts
- Handle errors gracefully - Wrap your code in try-catch blocks
- Keep hooks lightweight - Offload heavy processing to background jobs
- Test thoroughly - Hooks can affect core functionality
- Document your hooks - Comment your code for future maintenance
Next Steps
- Creating Hooks - Learn how to create and register hooks
- Module Hooks Reference - Complete list of available module hooks
- Output Hooks Reference - Complete list of output hooks
- Helper Functions - Reference for hook helper functions