当前浏览:首页 / WordPress函数 / activate_plugin()

activate_plugin( string $plugin, string $redirect = '', bool $network_wide = false, bool $silent = false ): null|WP_Error

尝试在“沙盒”中启用插件,并在成功后重定向

activate

plugin 插件more...


描述

已激活的插件将不会尝试再次启用。

它的工作方式是在尝试引入插件文件之前将重定向设置为错误。如果插件失败,则重定向不会被成功消息覆盖。此外,选项将不会更新,并且不会在插件错误时调用激活挂钩。

需要注意的是,下面的代码绝不会阻止文件中的错误。该代码不应在其他地方用于复制“沙盒”,它使用重定向来工作。
{@source 13 1}

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


参数

$pluginstring必填
插件文件相对于插件目录的路径。
$redirectstring可选
要重定向到的URL。

默认:''

$network_widebool可选
是为网络中的所有站点启用插件,还是仅为当前站点启用插件。仅限多站点。

默认:false

$silentbool可选
是否阻止调用激活钩子。

默认:false


返回

null|WP_Error 成功时为null,无效文件为WP_Error


更多信息

插件会因为多种原因而无法激活包括:解析header信息的问题,“插件”缓存的问题(请参见WordPress Object Cache),或权限错误。

The plugin does not have a valid header.

插件缓存的问题,是在插件全部初始化后添加或修改插件文件时引起的。这可以通过重新加载页面,将activate_plugin()作为单独的AJAX请求发送,或者在必要时手动更新缓存来解决。示例如下:

$cache_plugins = wp_cache_get( 'plugins', 'plugins' );
if ( !empty( $cache_plugins ) ) {
	$new_plugin = array(
		'Name' => $plugin_name,
		'PluginURI' => $plugin_uri,
		'Version' => $plugin_version,
		'Description' => $plugin_description,
		'Author' => $author_name,
		'AuthorURI' => $author_uri,
		'TextDomain' => '',
		'DomainPath' => '',
		'Network' => '',
		'Title' => $plugin_name,
		'AuthorName' => $author_name,
	);
	$cache_plugins[''][$plugin_path] = $new_plugin;
	wp_cache_set( 'plugins', $cache_plugins, 'plugins' );
}

钩子



源码

查看源码 官方文档


更新日志

版本描述
5.2.0测试WordPress版本和PHP版本的兼容性。
2.5.0开始引入

用户贡献的笔记

  • 贡献者:Codex

    基本示例

    尝试激活插件,失败时返回WP_Error

    $result = activate_plugin( 'plugin-dir/plugin-file.php' );
    if ( is_wp_error( $result ) ) {
    	// Process Error
    }
  • 贡献者:ttodua

    如果您想使用重定向(在插件激活时),您应该只使用do,如果您的插件未通过“BULK activation”“激活”!

    add_action( 'activated_plugin', 'wpdocs_my_redirection' );
    function wpdocs_my_redirection( $plugin ) {
        $table = new WP_Plugins_List_Table;
        if ( plugin_basename( __FILE__ ) === $plugin && 'activated-selected' !== $table->current_action() ) {  
           wp_redirect( ... );
           exit(); 
        } 
    }