wpseek.com
				A WordPress-centric search engine for devs and theme authors
			validate_plugin_requirements › WordPress Function
Since5.2.0
Deprecatedn/a
› validate_plugin_requirements ( $plugin )
| Parameters: | 
 | 
| Returns: | 
 | 
| Defined at: | 
 | 
| Codex: | |
| Change Log: | 
 | 
Validates the plugin requirements for WordPress version and PHP version.
Uses the information fromRequires at least, Requires PHP and Requires Plugins headers
defined in the plugin's main PHP file.Related Functions: validate_theme_requirements, validate_plugin, validate_active_plugins, wp_validate_redirect, validate_username
	Source
function validate_plugin_requirements( $plugin ) {
	$plugin_headers = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
	$requirements = array(
		'requires'         => ! empty( $plugin_headers['RequiresWP'] ) ? $plugin_headers['RequiresWP'] : '',
		'requires_php'     => ! empty( $plugin_headers['RequiresPHP'] ) ? $plugin_headers['RequiresPHP'] : '',
		'requires_plugins' => ! empty( $plugin_headers['RequiresPlugins'] ) ? $plugin_headers['RequiresPlugins'] : '',
	);
	$compatible_wp  = is_wp_version_compatible( $requirements['requires'] );
	$compatible_php = is_php_version_compatible( $requirements['requires_php'] );
	$php_update_message = '</p><p>' . sprintf(
		/* translators: %s: URL to Update PHP page. */
		__( '<a href="%s">Learn more about updating PHP</a>.' ),
		esc_url( wp_get_update_php_url() )
	);
	$annotation = wp_get_update_php_annotation();
	if ( $annotation ) {
		$php_update_message .= '</p><p><em>' . $annotation . '</em>';
	}
	if ( ! $compatible_wp && ! $compatible_php ) {
		return new WP_Error(
			'plugin_wp_php_incompatible',
			'<p>' . sprintf(
				/* translators: 1: Current WordPress version, 2: Current PHP version, 3: Plugin name, 4: Required WordPress version, 5: Required PHP version. */
				_x( '<strong>Error:</strong> Current versions of WordPress (%1$s) and PHP (%2$s) do not meet minimum requirements for %3$s. The plugin requires WordPress %4$s and PHP %5$s.', 'plugin' ),
				get_bloginfo( 'version' ),
				PHP_VERSION,
				$plugin_headers['Name'],
				$requirements['requires'],
				$requirements['requires_php']
			) . $php_update_message . '</p>'
		);
	} elseif ( ! $compatible_php ) {
		return new WP_Error(
			'plugin_php_incompatible',
			'<p>' . sprintf(
				/* translators: 1: Current PHP version, 2: Plugin name, 3: Required PHP version. */
				_x( '<strong>Error:</strong> Current PHP version (%1$s) does not meet minimum requirements for %2$s. The plugin requires PHP %3$s.', 'plugin' ),
				PHP_VERSION,
				$plugin_headers['Name'],
				$requirements['requires_php']
			) . $php_update_message . '</p>'
		);
	} elseif ( ! $compatible_wp ) {
		return new WP_Error(
			'plugin_wp_incompatible',
			'<p>' . sprintf(
				/* translators: 1: Current WordPress version, 2: Plugin name, 3: Required WordPress version. */
				_x( '<strong>Error:</strong> Current WordPress version (%1$s) does not meet minimum requirements for %2$s. The plugin requires WordPress %3$s.', 'plugin' ),
				get_bloginfo( 'version' ),
				$plugin_headers['Name'],
				$requirements['requires']
			) . '</p>'
		);
	}
	WP_Plugin_Dependencies::initialize();
	if ( WP_Plugin_Dependencies::has_unmet_dependencies( $plugin ) ) {
		$dependency_names       = WP_Plugin_Dependencies::get_dependency_names( $plugin );
		$unmet_dependencies     = array();
		$unmet_dependency_names = array();
		foreach ( $dependency_names as $dependency => $dependency_name ) {
			$dependency_file = WP_Plugin_Dependencies::get_dependency_filepath( $dependency );
			if ( false === $dependency_file ) {
				$unmet_dependencies['not_installed'][ $dependency ] = $dependency_name;
				$unmet_dependency_names[]                           = $dependency_name;
			} elseif ( is_plugin_inactive( $dependency_file ) ) {
				$unmet_dependencies['inactive'][ $dependency ] = $dependency_name;
				$unmet_dependency_names[]                      = $dependency_name;
			}
		}
		$error_message = sprintf(
			/* translators: 1: Plugin name, 2: Number of plugins, 3: A comma-separated list of plugin names. */
			_n(
				'<strong>Error:</strong> %1$s requires %2$d plugin to be installed and activated: %3$s.',
				'<strong>Error:</strong> %1$s requires %2$d plugins to be installed and activated: %3$s.',
				count( $unmet_dependency_names )
			),
			$plugin_headers['Name'],
			count( $unmet_dependency_names ),
			implode( wp_get_list_item_separator(), $unmet_dependency_names )
		);
		if ( is_multisite() ) {
			if ( current_user_can( 'manage_network_plugins' ) ) {
				$error_message .= ' ' . sprintf(
					/* translators: %s: Link to the plugins page. */
					__( '<a href="%s">Manage plugins</a>.' ),
					esc_url( network_admin_url( 'plugins.php' ) )
				);
			} else {
				$error_message .= ' ' . __( 'Please contact your network administrator.' );
			}
		} else {
			$error_message .= ' ' . sprintf(
				/* translators: %s: Link to the plugins page. */
				__( '<a href="%s">Manage plugins</a>.' ),
				esc_url( admin_url( 'plugins.php' ) )
			);
		}
		return new WP_Error(
			'plugin_missing_dependencies',
			"<p>{$error_message}</p>",
			$unmet_dependencies
		);
	}
	/**
	 * Filters the plugin requirement validation response.
	 *
	 * If a plugin fails due to a Core-provided validation (incompatible WP, PHP versions), this
	 * filter will not fire. A WP_Error response will already be returned.
	 *
	 * This filter is intended to add additional validation steps by site administrators.
	 *
	 * @since 6.9.0
	 *
	 * @param bool|WP_Error $met_requirements True if the plugin meets requirements, WP_Error if not.
	 * @param string $plugin Path to the plugin file relative to the plugins directory.
	 */
	return apply_filters( 'validate_plugin_requirements', true, $plugin );
}