Skip to main content
Snapshotify’s hook surface is small and deliberate: the pipeline is safety-critical, so there are few places to change its behavior. Most of what is exposed is around notifications and cloud storage. Add these to your theme’s functions.php or a site-specific plugin.

Notifications

Four filters shape the email, each receiving the event name, the backup ID, and a context array. Because the event is passed in, one filter can route different outcomes differently.
mixed
required
The recipient, subject, body, or headers being filtered.
string
Which event fired, such as a completed or failed backup or restore.
int
array

Backup pipeline

snapshotify_keep_local_copy

Whether to keep the local archive after a successful cloud upload.
bool
default:"true"
With this off, a cloud file that is deleted or becomes unreachable leaves you with nothing. Only use it when disk space genuinely forces the choice.

snapshotify_cron_drive_budget

How long a scheduled backup may spend driving itself to completion inside the cron request.
int
default:"900"
Fifteen minutes.
Raise it for a large site whose scheduled backup does not finish in the default window. Only useful if your host allows cron requests to run that long.

Cloud storage

These exist so you can run your own provider applications instead of DaftPlug’s, which some agencies and security policies require.
The relay is what holds the client secret. A secret shipped inside a plugin installed on thousands of sites is not a secret, so the token exchange happens server-side instead. Pointing these at your own relay means running your own Google Cloud, Azure, or Dropbox application and your own exchange endpoint.

Settings and bootstrap

snapshotify_settings_update:before / :after

Fire around the settings write, both receiving $settings.

snapshotify_pro_loaded

Fires once the Freemius SDK is initialized, before features are constructed.

snapshotify_admin_js_vars

Filters the variables passed to the admin JavaScript.

Constants

What is deliberately not filterable

Worth stating, because their absence is a design decision rather than an oversight.
What is never backed up or restored, wp-config.php, .user.ini, host mu-plugins, drop-ins, is fixed. Each entry is there because including it breaks a restore onto a different host, and a filter would let someone re-break it.
The variants generated during a migration, including the JSON-escaped forms page builders rely on, are not filterable. Getting this wrong produces a site that loads while pointing at the old domain, which is worse than a visible failure.
There is no filter to allow multisite. The table enumeration would silently omit network tables and every subsite, so the archive would look successful and be useless.