activate_plugin

函数
activate_plugin ( $plugin, $redirect = '', $network_wide = false, $silent = false )
参数
  • (string) $plugin Path to the plugin file relative to the plugins directory.
    Required:
  • (string) $redirect Optional. URL to redirect to.
    Required:
    Default: (empty)
  • (bool) $network_wide Optional. Whether to enable the plugin for all sites in the network or just the current site. Multisite only. Default false.
    Required:
    Default: false
  • (bool) $silent Optional. Whether to prevent calling activation hooks. Default false.
    Required:
    Default: false
返回值
  • (null|WP_Error) Null on success, WP_Error on invalid file.
定义位置
相关方法
activate_pluginsdeactivate_pluginsactivate_sitewide_plugindeactivate_sitewide_pluginvalidate_plugin
引入
2.5.0
弃用
-

activate_plugin: 这个函数用于激活WordPress中的一个插件。它执行一些检查,以确保该插件可以被激活,然后在WordPress的选项表中添加一个条目,表明该插件已经激活。

在一个”sandbox”中尝试激活插件,成功后重定向。

已经被激活的插件不会再尝试被激活。

它的工作方式是,在尝试包含插件文件之前,将重定向设置为错误。如果插件失败了,那么重定向将不会被成功信息所覆盖。同时,选项不会被更新,激活钩也不会在插件出错时被调用。

应该注意的是,下面的代码在任何情况下都不会真正防止文件内的错误。这段代码不应该被用在其他地方来复制”sandbox”,它使用重定向来工作。{@source 1}

如果发现任何错误或输出文本,那么将被捕获以确保成功重定向将更新错误重定向。

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();

		// Load the plugin to test whether it throws any errors.
		plugin_sandbox_scrape( $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.
			 */
			do_action( 'activated_plugin', $plugin, $network_wide );
		}

		if ( ob_get_length() > 0 ) {
			$output = ob_get_clean();
			return new WP_Error( 'unexpected_output', __( 'The plugin generated unexpected output.' ), $output );
		}

		ob_end_clean();
	}

	return null;
}

常见问题

FAQs
查看更多 >