Using WordPress ‘activate_{$plugin}’ PHP action

The activate_{$plugin} WordPress PHP action fires as a specific plugin is being activated. This hook is used internally by register_activation_hook(). The dynamic portion of the hook name, $plugin, refers to the plugin basename. If a plugin is silently activated (such as during an update), this hook does not fire.

Usage

add_action('activate_your-plugin/your-plugin.php', 'your_custom_function');

function your_custom_function() {
    // your custom code here
}

Parameters

  • $network_wide (bool) – Whether to enable the plugin for all sites in the network or just the current site. Multisite only. Default is false.

More information

See WordPress Developer Resources: activate_{$plugin}

Examples

Creating a Custom Post Type on Plugin Activation

This code creates a custom post type called “movies” when the plugin is activated.

add_action('activate_your-plugin/your-plugin.php', 'create_movies_post_type');

function create_movies_post_type() {
    // Register a custom post type called 'movies'
    register_post_type('movies', [
        'public' => true,
        'label'  => 'Movies',
    ]);
}

Adding Custom Capabilities to a Role

This code adds custom capabilities to the “editor” role when the plugin is activated.

add_action('activate_your-plugin/your-plugin.php', 'add_custom_caps_to_editor_role');

function add_custom_caps_to_editor_role() {
    // Get the 'editor' role
    $editor_role = get_role('editor');

    // Add custom capabilities
    $editor_role->add_cap('manage_custom_plugin_settings');
}

Creating a Custom Database Table

This code creates a custom database table called “wp_movies” when the plugin is activated.

add_action('activate_your-plugin/your-plugin.php', 'create_movies_table');

function create_movies_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'movies';

    // SQL to create the table
    $sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        title varchar(255) NOT NULL,
        PRIMARY KEY  (id)
    );";

    // Execute the SQL query
    $wpdb->query($sql);
}

Creating a Custom Page

This code creates a custom page called “Plugin Settings” when the plugin is activated.

add_action('activate_your-plugin/your-plugin.php', 'create_plugin_settings_page');

function create_plugin_settings_page() {
    // Create a new page called 'Plugin Settings'
    wp_insert_post([
        'post_title'   => 'Plugin Settings',
        'post_content' => '[plugin_settings]',
        'post_status'  => 'publish',
        'post_type'    => 'page',
    ]);
}

Adding a Custom Option

This code adds a custom option called “plugin_option” with the default value “Hello World!” when the plugin is activated.

add_action('activate_your-plugin/your-plugin.php', 'add_custom_plugin_option');

function add_custom_plugin_option() {
    // Add a custom option called 'plugin_option'
    add_option('plugin_option', 'Hello World!');
}