• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to footer
WordPress core a2z

WordPress core a2z

WordPress core only

  • Home
  • Plugins
  • Blocks
  • Shortcodes
  • APIs
  • Classes
  • Files
  • Hooks
  • Sitemap
  • Blog
Home / APIs / activate_plugin() – Attempts activation of plugin in a "sandbox" and redirects on success.

You appear to be a bot. Output may be restricted

Description

Attempts activation of plugin in a "sandbox" and redirects on success.

A plugin that is already activated will not attempt to be activated again. The way it works is by setting the redirection to the error before trying to include the plugin file. If the plugin fails, then the redirection will not be overwritten with the success message. Also, the options will not be updated and the activation hook will not be called on plugin error. It should be noted that in no way the below code will actually prevent errors within the file. The code should not be used elsewhere to replicate the "sandbox", which uses redirection to work. {@source 13 1} If any errors are found or text is outputted, then it will be captured to ensure that the success redirection will update the error redirection.

Usage

$null|WP_Error = activate_plugin( $plugin, $redirect, $network_wide, $silent );

Parameters

$plugin
( string ) required – Path to the plugin file relative to the plugins directory.
$redirect
( string ) optional – Optional. URL to redirect to.
$network_wide
( bool ) optional – Optional. Whether to enable the plugin for all sites in the network or just the current site. Multisite only. Default false.
$silent
( bool ) optional – Optional. Whether to prevent calling activation hooks. Default false.

Returns

null|WP_Error Null on success, WP_Error on invalid file.

Source

File name: wordpress/wp-admin/includes/plugin.php


Lines:

1 to 100 of 114
function activate_plugin( $plugin, $redirect = '', $network_wide = false, $silent = false ) {
  $plugin = plugin_basename( trim( $plugin ) );

  if ( is_multisite() && ( $network_wide || is_network_only_plugin( $plugin ) ) ) {
    $network_wide        = true;
    $current             = get_site_option( 'active_sitewide_plugins', array() );
    $_GET['networkwide'] = 1; // Back compat for plugins looking for this value.
  } else {
    $current = get_option( 'active_plugins', array() );
  }

  $valid = validate_plugin( $plugin );
  if ( is_wp_error( $valid ) ) {
    return $valid;
  }

  $requirements = validate_plugin_requirements( $plugin );
  if ( is_wp_error( $requirements ) ) {
    return $requirements;
  }

  if ( $network_wide && ! isset( $current[ $plugin ] )
    || ! $network_wide && ! in_array( $plugin, $current, true )
  ) {
    if ( ! empty( $redirect ) ) {
      // We'll override this later if the plugin can be included without fatal error.
      wp_redirect( add_query_arg( '_error_nonce', wp_create_nonce( 'plugin-activation-error_' . $plugin ), $redirect ) );
    }

    ob_start();

    if ( ! defined( 'WP_SANDBOX_SCRAPING' ) ) {
      define( 'WP_SANDBOX_SCRAPING', true );
    }

    wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin );
    $_wp_plugin_file = $plugin;
    include_once WP_PLUGIN_DIR . '/' . $plugin;
    $plugin = $_wp_plugin_file; // Avoid stomping of the $plugin variable in a plugin.

    if ( ! $silent ) {
      
/**
 * Fires before a plugin is activated.
 *
 * If a plugin is silently activated (such as during an update),
 * this hook does not fire.
 *
 * @since 2.9.0
 *
 * @param string $plugin       Path to the plugin file relative to the plugins directory.
 * @param bool   $network_wide Whether to enable the plugin for all sites in the network
 *                             or just the current site. Multisite only. Default false.
 */
      do_action( 'activate_plugin', $plugin, $network_wide );

      
/**
 * Fires as a specific plugin is being activated.
 *
 * This hook is the "activation" hook 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.
 *
 * @since 2.0.0
 *
 * @param bool $network_wide Whether to enable the plugin for all sites in the network
 *                           or just the current site. Multisite only. Default false.
 */
      do_action( "activate_{$plugin}", $network_wide );
    }

    if ( $network_wide ) {
      $current            = get_site_option( 'active_sitewide_plugins', array() );
      $current[ $plugin ] = time();
      update_site_option( 'active_sitewide_plugins', $current );
    } else {
      $current   = get_option( 'active_plugins', array() );
      $current[] = $plugin;
      sort( $current );
      update_option( 'active_plugins', $current );
    }

    if ( ! $silent ) {
      
/**
 * Fires after a plugin has been activated.
 *
 * If a plugin is silently activated (such as during an update),
 * this hook does not fire.
 *
 * @since 2.9.0
 *
 * @param string $plugin       Path to the plugin file relative to the plugins directory.
 * @param bool   $network_wide Whether to enable the plugin for all sites in the network
 *                             or just the current site. Multisite only. Default false.
 */
[1] [2] Next »

 View on GitHub View on Trac

Published: 25th November 2019 | Last updated: 9th December 2020

Primary Sidebar

Information

Function name: activate_plugin
Plugin ref: WordPress
Version: 5.6.2
Sourcefile: wp-admin/includes/plugin.php
File ref: wp-admin/includes/plugin.php
Deprecated?: No
API Letters: A,P

Footer

WP-a2z
WordPress core a2z
WordPress core only
WordPress 5.6.2
WordPress a2z
WordPress core a2z
Genesis Theme Framework a2z
Jetpack a2z
WordPress develop tests
Easy Digital Downloads a2z
WooCommerce a2z
Yoast SEO a2z
WordPress Blocks

Site:  core.wp-a2z.org
© Copyright WP-a2z 2014-2021. All rights reserved.


Website designed and developed by Herb Miller
Proudly powered by WordPress and oik plugins

  • Home
  • Blog
  • Sitemap
  • Sites