函数文档

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.

Return

WP_Error[] Array of plugin errors keyed by plugin file name.

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.