WP_Plugin_Dependencies::get_dependency_api_data()protected staticWP 6.5.0

Retrieves and stores dependency plugin data from the WordPress.org Plugin API.

Метод класса: WP_Plugin_Dependencies{}

Хуков нет.

Возвращает

Массив|null. An array of dependency API data, or void on early exit.

Использование

$result = WP_Plugin_Dependencies::get_dependency_api_data();

Заметки

  • Global. Строка. $pagenow The filename of the current screen.

Список изменений

С версии 6.5.0 Введена.

Код WP_Plugin_Dependencies::get_dependency_api_data() WP 6.6.2

protected static function get_dependency_api_data() {
	global $pagenow;

	if ( ! is_admin() || ( 'plugins.php' !== $pagenow && 'plugin-install.php' !== $pagenow ) ) {
		return;
	}

	if ( is_array( self::$dependency_api_data ) ) {
		return self::$dependency_api_data;
	}

	$plugins                   = self::get_plugins();
	self::$dependency_api_data = (array) get_site_transient( 'wp_plugin_dependencies_plugin_data' );
	foreach ( self::$dependency_slugs as $slug ) {
		// Set transient for individual data, remove from self::$dependency_api_data if transient expired.
		if ( ! get_site_transient( "wp_plugin_dependencies_plugin_timeout_{$slug}" ) ) {
			unset( self::$dependency_api_data[ $slug ] );
			set_site_transient( "wp_plugin_dependencies_plugin_timeout_{$slug}", true, 12 * HOUR_IN_SECONDS );
		}

		if ( isset( self::$dependency_api_data[ $slug ] ) ) {
			if ( false === self::$dependency_api_data[ $slug ] ) {
				$dependency_file = self::get_dependency_filepath( $slug );

				if ( false === $dependency_file ) {
					self::$dependency_api_data[ $slug ] = array( 'Name' => $slug );
				} else {
					self::$dependency_api_data[ $slug ] = array( 'Name' => $plugins[ $dependency_file ]['Name'] );
				}
				continue;
			}

			// Don't hit the Plugin API if data exists.
			if ( ! empty( self::$dependency_api_data[ $slug ]['last_updated'] ) ) {
				continue;
			}
		}

		if ( ! function_exists( 'plugins_api' ) ) {
			require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
		}

		$information = plugins_api(
			'plugin_information',
			array(
				'slug'   => $slug,
				'fields' => array(
					'short_description' => true,
					'icons'             => true,
				),
			)
		);

		if ( is_wp_error( $information ) ) {
			continue;
		}

		self::$dependency_api_data[ $slug ] = (array) $information;
		// plugins_api() returns 'name' not 'Name'.
		self::$dependency_api_data[ $slug ]['Name'] = self::$dependency_api_data[ $slug ]['name'];
		set_site_transient( 'wp_plugin_dependencies_plugin_data', self::$dependency_api_data, 0 );
	}

	// Remove from self::$dependency_api_data if slug no longer a dependency.
	$differences = array_diff( array_keys( self::$dependency_api_data ), self::$dependency_slugs );
	foreach ( $differences as $difference ) {
		unset( self::$dependency_api_data[ $difference ] );
	}

	ksort( self::$dependency_api_data );
	// Remove empty elements.
	self::$dependency_api_data = array_filter( self::$dependency_api_data );
	set_site_transient( 'wp_plugin_dependencies_plugin_data', self::$dependency_api_data, 0 );

	return self::$dependency_api_data;
}