BackupEase is built to be extended. Add-ons, including BackupEase Pro itself, register new storage providers, inject admin UI, and react to backup events entirely through standard WordPress action and filter hooks, without modifying the plugin’s source. This reference lists the hooks BackupEase fires and shows how to use them.
This is a developer reference. Everything here uses the normal WordPress add_action() and add_filter() functions, and these are the same public hooks BackupEase Pro is built on, so anything Pro does, your own add-on can do too.
How extension works
BackupEase exposes two kinds of hooks:
- Actions (
do_action) let you run code at a point in the lifecycle, or output markup into the admin UI. - Filters (
apply_filters) let you change a value: register a provider, relabel a destination, veto a backup, swap the archive builder, and so on.
A typical add-on hangs its logic off plugins_loaded and checks that BackupEase is present first:
add_action( 'plugins_loaded', function () {
if ( ! defined( 'BACKUPEASE_VERSION' ) ) {
return; // BackupEase is not active.
}
// Register your hooks here.
}, 20 );
Backup lifecycle
React to backups as they run, or block them from starting.
| Hook | Type | Signature & purpose |
|---|---|---|
backupease_after_backup_complete |
Action | ( int $backup_id, array $state )Fires when a backup finishes successfully. |
backupease_backup_failed |
Action | ( string $error_message, array $state )Fires when a backup fails. |
backupease_can_start_backup |
Filter | ( bool $can ) default trueReturn false to veto a new backup (Pro uses this to block backups during a migration). |
add_action( 'backupease_after_backup_complete', function ( $backup_id, $state ) {
error_log( "BackupEase finished backup #{$backup_id}" );
}, 10, 2 );
Storage providers
The storage system is fully pluggable. These hooks are how Pro adds FTP, SFTP, OneDrive, Dropbox, and S3, and how you would add your own destination.
| Hook | Type | Signature & purpose |
|---|---|---|
backupease_valid_storage_providers |
Filter | ( array $slugs ) default ['local','googledrive']Register your provider’s slug. |
backupease_storage_labels |
Filter | ( array $labels )Map of slug => display label. |
backupease_provider_icons |
Filter | ( array $icons )Map of slug => inline <svg> markup. |
backupease_parse_storage_destinations |
Filter | ( array $destinations, array $post )Add your slug when its checkbox is selected in a backup request. |
backupease_upload_to_destination |
Filter | ( mixed $result, string $destination, array $state )Perform the upload for your provider and return the result. |
backupease_retry_upload_to_destination |
Filter | ( mixed $result, string $provider, int $backup_id, string $db_file, string $zip_file )Handle a manual re-upload of an existing backup. |
backupease_delete_from_provider |
Filter | ( mixed $result, int $post_id, string $provider )Delete a backup from your provider. Return WP_Error('not_found', ...) if already absent. |
backupease_handle_test_storage |
Filter | ( bool $handled, string $provider )Handle the “Test connection” button for your provider. |
backupease_active_storage_destinations |
Filter | ( array $destinations, array $settings )Add your provider to the dashboard’s Storage overview card. |
backupease_available_remote_providers |
Filter | ( array $providers )Remote providers offered for on-demand “Upload to” actions. |
// Register a custom "myhost" storage provider.
add_filter( 'backupease_valid_storage_providers', function ( $slugs ) {
$slugs[] = 'myhost';
return $slugs;
} );
add_filter( 'backupease_storage_labels', function ( $labels ) {
$labels['myhost'] = 'My Host';
return $labels;
} );
add_filter( 'backupease_upload_to_destination', function ( $result, $destination, $state ) {
if ( 'myhost' !== $destination ) {
return $result; // Not ours, leave it untouched.
}
// ... upload $state['zip_file'] / $state['db_file'] to your service ...
return true; // true on success, or a WP_Error on failure.
}, 10, 3 );
Admin UI
Inject tabs, storage cards, credential sections, and settings into the BackupEase dashboard. These action hooks simply echo markup where they fire.
| Hook | Type | Where it renders |
|---|---|---|
backupease_tabs_nav | Action | Tab bar, between Backup Log and License. |
backupease_tabs_content | Action | Tab-panel area, for a custom tab’s body. |
backupease_settings_storage_destinations | Action | ( array $settings ) Storage-destination cards in Settings. |
backupease_manual_backup_storage_destinations | Action | ( array $settings ) Storage cards on the Manual Backup tab. |
backupease_settings_storage_sections | Action | ( array $settings ) Provider credential cards in Settings › Storage. |
backupease_settings_sections | Action | ( array $settings ) Extends the Compression settings panel. |
backupease_after_settings_form | Action | ( array $settings ) After the main settings form. |
backupease_license_tab_content | Action | License tab body (used by Pro for activation UI). |
// Add a custom tab to the BackupEase dashboard.
add_action( 'backupease_tabs_nav', function () {
echo '<a href="#myaddon" class="backupease-tab-link tab-item" data-tab="myaddon">My Add-on</a>';
} );
add_action( 'backupease_tabs_content', function () {
echo '<div id="myaddon" class="backupease-tab-content">…</div>';
} );
Scheduling
| Hook | Type | Signature & purpose |
|---|---|---|
backupease_max_schedules |
Filter | ( int $max ) default 1Cap on the number of schedules. Ignored while Pro is active (Pro lifts it). |
backupease_valid_schedule_frequencies |
Filter | ( array $freqs ) default ['daily','weekly','monthly']Frequency slug => label. Pro adds hourly and multi-hour options. |
backupease_allowed_storage_destinations |
Filter | ( array $slugs )Destinations selectable in the schedule form. |
Compression & other filters
| Hook | Type | Signature & purpose |
|---|---|---|
backupease_make_archive_builder |
Filter | ( object $builder, array $settings )Return a different archive builder (Pro swaps in the Zstandard builder here). |
backupease_settings_saved |
Action | ( array $validated_settings )Fires after settings are sanitized and saved. |
backupease_pro_upsell_url |
Filter | ( string $url )Override the upgrade CTA URL shown in the free plugin. |
WP-CLI
BackupEase also ships a WP-CLI command for scripting backups outside the admin UI:
wp backupease run # full backup with saved settings
wp backupease run --database-only
wp backupease run --files-only
wp backupease run --schedule=<id> # run a specific saved schedule
wp backupease run --storage=googledrive
These are the same hooks BackupEase Pro uses. When you filter shared values such as backupease_storage_labels or backupease_valid_storage_providers, always add to the incoming array and return it, never replace it, so you don’t remove the built-in or Pro providers. Prefix your own slugs and callbacks to avoid collisions.

