deactivated_plugin hook: get the name of the plugin

I would like that every time any plugin previously activated, a function from my plugin be called, returning (at least) the name of the plugin, or something that allows to identify it (file name?).

I figured i could use the action hook “deactivated_plugin” but i’m wondering what information from the desactivated plugin is actually available?

1 Answer
1

You can hook into the action 'deactivate_plugin' to get the plugin’s base name and (as second parameter) if it was deactivated network wide.

See wp-admin/includes/plugin.php function deactivate_plugins().

There seems to be no hook for plugin deletion.

Sample logging code:

add_action( 'activated_plugin', 't5_plugin_logger', 10, 2 );
add_action( 'deactivated_plugin', 't5_plugin_logger', 10, 2 );

/**
 * Log plugin activations and deactivations.
 *
 * @param  string $plugin
 * @param  bool   $network_wide
 * @return void
 */
function t5_plugin_logger( $plugin, $network_wide )
{
    $log_size = 20;
    $log      = get_option( 't5_plugin_log', array () );

    // Remove the oldest entry.
    sizeof( $log ) > $log_size and array_shift( $log );

    $plugin_data = get_plugin_data( WP_PLUGIN_DIR . "https://wordpress.stackexchange.com/" . $plugin );
    $date_format = get_option( 'date_format' ) . ' · ' . get_option( 'time_format' );

    $log[] = array (
        'user'    => esc_html( wp_get_current_user()->display_name ),
        'plugin'  => $plugin_data['Name'],
        'network' => $network_wide ? '✔' : '',
        'time'    => date( $date_format, time() ),
        'action'  => 'deactivated_plugin' === current_filter() ? 'deactivated' : 'activated'
    );

    update_option( 't5_plugin_log', $log );
}

Now every plugin activation or deactivation will be added to the log option field. You can use this data anywhere. I made a small dashboard widget:

enter image description here

Download as plugin from GitHub: T5 Plugin Log

Leave a Comment