To send an email on plugin activation:
/**
* Sends an email to the admin on plugin activation.
*
* @see https://wpcodebook.com/wordpress-email-admin-plugin-activated-deactivated-deleted/
* @see https://developer.wordpress.org/reference/hooks/activated_plugin/
*
* @param string $plugin Path to the plugin file relative to the plugins directory.
* @param bool $network_wide Whether the plugin is activated for all sites in the network or just the current site (multisite only).
*/
add_action( 'activated_plugin', function ( $plugin, $network_wide ) {
$message = sprintf( esc_html__( 'Plugin activated: %s' ),
"<code>{$plugin}</code>" );
if ( $network_wide ) {
$message .= sprintf( ' (%s)', esc_html__( 'all sites' ) );
}
$subject = sprintf( esc_html__( 'Plugin [%s] activated on %s' ),
$plugin,
get_option( 'blogname' )
);
$to = get_option( 'admin_email' );
wp_mail( $to, $subject, $message );
}, 10, 2 );To send an email on plugin deactivation – replace activated_plugin with deactivated_plugin:
/**
* Sends an email to the admin on plugin deactivation.
*
* @see https://wpcodebook.com/wordpress-email-admin-plugin-activated-deactivated-deleted/
* @see https://developer.wordpress.org/reference/hooks/deactivated_plugin/
*
* @param string $plugin Path to the plugin file relative to the plugins directory.
* @param bool $network_wide Whether the plugin is deactivated for all sites in the network or just the current site (multisite only).
*/
add_action( 'deactivated_plugin', function ( $plugin, $network_wide ) {
$message = sprintf( esc_html__( 'Plugin deactivated: %s' ),
"<code>{$plugin}</code>" );
if ( $network_wide ) {
$message .= sprintf( ' (%s)', esc_html__( 'all sites' ) );
}
$subject = sprintf( esc_html__( 'Plugin [%s] deactivated on %s' ),
$plugin,
get_option( 'blogname' )
);
$to = get_option( 'admin_email' );
wp_mail( $to, $subject, $message );
}, 10, 2 );Similarly, to send an email on plugin deletion – use deleted_plugin hook:
/**
* Sends an email to the admin on plugin deletion.
*
* @see https://wpcodebook.com/wordpress-email-admin-plugin-activated-deactivated-deleted/
* @see https://developer.wordpress.org/reference/hooks/deleted_plugin/
*
* @param string $plugin Path to the plugin file relative to the plugins directory.
* @param bool $deleted Whether the plugin deletion was successful.
*/
add_action( 'deleted_plugin', function ( $plugin, $deleted ) {
$message = sprintf( esc_html__( 'Plugin deleted (%s): %s' ),
( $deleted ? esc_html__( 'success' ) : esc_html__( 'error' ) ) ,
"<code>{$plugin}</code>"
);
$subject = sprintf( esc_html__( 'Plugin [%s] deleted on %s' ),
$plugin,
get_option( 'blogname' )
);
$to = get_option( 'admin_email' );
wp_mail( $to, $subject, $message );
}, 10, 2 );We can also add the list of currently active plugins to the email with:
sprintf( esc_html__( 'Active plugins: %s' ), '<pre>' . implode( PHP_EOL, get_option( 'active_plugins', array() ) ) . '</pre>' );
