激活plugin(一串 $插件,一串 $重定向 = ,布尔 $网络范围 = ,布尔 $静音 =  ):空|WP_错误

尝试在“沙盒”中激活插件,并在成功时重定向。

描述

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

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

应该注意的是,下面的代码无论如何都不会真正阻止文件中的错误。代码不应在其他地方用于复制“沙盒”,后者使用重定向工作。
{@source 13 1}

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

参数

$插件一串必修的
相对于插件目录的插件文件的路径。
$重定向一串可选择的
要重定向到的URL。

违约:''

$网络范围布尔可选择的
是为网络中的所有站点还是仅为当前站点启用插件。仅限多站点。

违约:

$静音布尔可选择的
是否阻止调用激活挂钩。

违约:

返回

空|WP_错误成功时为空,WP_错误在无效文件上。

更多信息

插件将无法激活,原因如下:;解析标头信息时出现问题,“插件”缓存出现问题(请参阅WordPress对象缓存),或权限错误。

插件没有有效的标头。

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

$cache_plugins=wp_cache_get(“插件”,“插件”);if(!空($cache_plugins)){$new_plugin=数组(“名称”=>$plugin_Name,“插件uri”=>$plugin_uri,“版本”=>$plugin_Version,“说明”=>$plugin_Description,“作者”=>$Author_name,“AuthorURI”=>$author_uri,“TextDomain”=>“”,“DomainPath”=>“”,“网络”=>“”,“标题”=>$plugin_name,'AuthorName'=>$author_name,);$cache_plugins[“”][$plugin_path]=$new_plugin;wp_cache_set(“插件”,$cache_plugins,“插件”);}

来源

函数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=真;$current=获取站点选项('active_sitewide_plugins',array());$_GET['网络范围']=1;//为寻找此值的插件返回compat。}其他{$current=get_option('active_plugins',array());}$valid=验证插件($plugin);if(iswp_error($valid)){返回$valid;}$需求=validate_plugin_requirements($plugin);if(iswp_error($requirements)){return$要求;}if($networkwide&&!isset($current[$plugin])|| ! $网络范围&&!in_array($plugin,$current,true)) {if(!空($redirect)){//如果插件可以被包含而没有致命错误,我们稍后将覆盖此内容。wp_redirect(add_query_arg('_error_noce',wp_create_noce('plugin-activation-error_'.$plugin),$redirect);}对象开始();//加载插件以测试它是否抛出任何错误。plugin_sandbox_scrape($plugin);if(!$silent){/***在插件激活前激发。**如果插件被静默激活(例如在更新期间),*这个钩子不着火。**@自2.9.0起**@param string$plugin相对于插件目录的插件文件的路径。*@param bool$network_wide是否为网络中的所有站点启用插件*或者只是当前站点。仅限多站点。默认为false。*/do_action('activate_plugin',$plugin,$network_wide);/***激活特定插件时激发。**这个钩子是register_activation_hook()内部使用的“activation”钩子。*钩子名称的动态部分`$plugin`是指插件的基本名称。**如果插件被静默激活(例如在更新期间),则不会触发此挂钩。**@自2.0.0起**@param bool$network_wide是否为网络中的所有站点启用插件*或者只是当前站点。仅限多站点。默认为false。*/do_action(“激活{$plugin}”,$network_wide);}if($network_wide){$current=获取站点选项('active_sitewide_plugins',array());$current[$plugin]=time();update_site_option('active_sitewide_plugins',$current);}其他{$current=获取选项('active_plugins',array());$current[]=$plugin;排序($current);update_option('active_plugins',$current);}if(!$silent){/***激活插件后激发。**如果插件被静默激活(例如在更新期间),*这个钩子不着火。**@自2.9.0起**@param string$plugin相对于插件目录的插件文件的路径。*@param bool$network_wide是否为网络中的所有站点启用插件*或者只是当前站点。仅限多站点。默认为false。*/do_action(“激活插件”,$plugin,$network_wide);}如果(ob_get_length()>0){$output=ob_get_clean();return new WP_Error('unexpected_output',__('The plugin generated unexpected output.'),$output);}ob_end_clean();}返回null;}

挂钩

do_操作('激活插件',一串 $插件,布尔 $network_wide($网络侧) )

激活插件后激发。

do_操作(“激活{$plugin}”,布尔 $网络范围 )

激活特定插件时激发。

变更日志

版本描述
5.2.0WordPress版本和PHP版本兼容性测试。
2.5.0介绍。

用户贡献的笔记

  1. 跳到注释4内容

    人们,如果你想使用重定向(在插件激活时)你应该只做如果你的插件没有通过“批量激活”被“激活”!

    add_action('激活插件','wpdocs_my_redirection');函数wpdocs_my_redirection($plugin){$table=新WP_Plugins_List_table;if(plugin_basename(__FILE_)===$plugin&&'激活-选择'!==$表->current_action()){wp_redirect(…);退出();} }

你必须登录在能够发表注释或反馈之前。