validate_active_plugins()
云策文档标注
概述
validate_active_plugins() 函数用于验证所有已激活的插件,自动停用无效插件并返回一个包含停用插件信息的数组。该函数在 WordPress 2.5.0 版本中引入,适用于插件管理和错误处理场景。
关键要点
- 验证 active_plugins 选项中的插件,确保其有效性
- 自动停用无效插件,并通过 deactivate_plugins() 函数执行停用操作
- 返回一个数组,键为插件文件名,值为 WP_Error 对象,表示插件错误信息
- 支持多站点环境,当用户具有 manage_network_plugins 权限时,会合并网络激活的插件进行验证
- 依赖 validate_plugin() 函数进行单个插件的验证,并检查返回结果是否为 WP_Error
代码示例
function validate_active_plugins() {
$plugins = get_option( 'active_plugins', array() );
// Validate vartype: array.
if ( ! is_array( $plugins ) ) {
update_option( 'active_plugins', array() );
$plugins = array();
}
if ( is_multisite() && current_user_can( 'manage_network_plugins' ) ) {
$network_plugins = (array) get_site_option( 'active_sitewide_plugins', array() );
$plugins = array_merge( $plugins, array_keys( $network_plugins ) );
}
if ( empty( $plugins ) ) {
return array();
}
$invalid = array();
// Invalid plugins get deactivated.
foreach ( $plugins as $plugin ) {
$result = validate_plugin( $plugin );
if ( is_wp_error( $result ) ) {
$invalid[ $plugin ] = $result;
deactivate_plugins( $plugin, true );
}
}
return $invalid;
}注意事项
- 该函数会直接修改 active_plugins 选项,停用无效插件,操作不可逆,需谨慎使用
- 在多站点环境中,仅当用户具有 manage_network_plugins 权限时才会验证网络激活的插件,否则只验证站点级别的插件
- 返回的数组以插件文件名为键,便于识别和处理特定插件的错误
- 函数内部使用了多个 WordPress 核心函数,如 get_option、update_option、is_wp_error 等,确保兼容性和稳定性
原文内容
Validates active plugins.
Description
Validate all active plugins, deactivates invalid and returns an array of deactivated ones.
Source
function validate_active_plugins() {
$plugins = get_option( 'active_plugins', array() );
// Validate vartype: array.
if ( ! is_array( $plugins ) ) {
update_option( 'active_plugins', array() );
$plugins = array();
}
if ( is_multisite() && current_user_can( 'manage_network_plugins' ) ) {
$network_plugins = (array) get_site_option( 'active_sitewide_plugins', array() );
$plugins = array_merge( $plugins, array_keys( $network_plugins ) );
}
if ( empty( $plugins ) ) {
return array();
}
$invalid = array();
// Invalid plugins get deactivated.
foreach ( $plugins as $plugin ) {
$result = validate_plugin( $plugin );
if ( is_wp_error( $result ) ) {
$invalid[ $plugin ] = $result;
deactivate_plugins( $plugin, true );
}
}
return $invalid;
}
Changelog
| Version | Description |
|---|---|
| 2.5.0 | Introduced. |