WordPress功能函数activate_plugin ()
WordPress功能函数activate_plugin (),在“沙箱”中尝试激活插件,成功后重新定向。
用法:
activate_plugin( string $plugin, string $redirect = '', bool $network_wide = false, bool $silent = false )
描述:
已经激活的插件将不再尝试被激活。
它的工作方式是在尝试包含插件文件之前将重定向设置为错误。如果插件失败,那么重定向将不会被成功消息覆盖。此外,选项不会被更新,激活钩子不会被调用插件错误。
应该注意的是,下面的代码无论如何都不能真正防止文件中的错误。代码不应该用在其他地方来复制使用重定向工作的“沙箱”。{@source 13 1}
如果发现了任何错误或输出了文本,那么将捕获错误,以确保成功重定向将更新错误重定向。
参数:
$plugin
(string) (必需) 相对于插件目录的插件文件路径。
$redirect
(string) (可选) 重定向到的URL。
默认值:“
$network_wide
(bool) (可选) 是否为网络中的所有站点启用插件,或仅为当前站点启用插件。多点。
默认值:假
$silent
(bool)(可选)是否阻止调用激活钩子。
默认值:假
返回
(null|WP_Error)成功返回null,无效文件返回WP_Error。
更多的信息:
由于多种原因,插件将无法激活以下通用响应:解析头信息的问题,' plugin '缓存的问题(见wordpress对象缓存),或者权限错误。
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' => '',
来源:
文件: wp-admin/includes/plugin.php
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() );
}
更新日志:
用户贡献的笔记
(由Codex - 5年前贡献)
基本的例子
尝试激活插件,失败返回WP_Error
$result = activate_plugin( 'plugin-dir/plugin-file.php' );
if ( is_wp_error( $result ) ) {
// Process Error
}
(由ttodua贡献- 4个月前)
朋友们,如果你想使用重定向(在插件激活时),你应该只在你的插件没有通过“批量激活”被“激活”的情况下使用重定向!
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();
}
}