Plugin Dependencies API

Framework for declaring and resolving plugin dependencies in WordPress.

Since: 6.5.0
Source: wp-includes/class-wp-plugin-dependencies.php

Components

ComponentDescription
class-wp-plugin-dependencies.mdStatic class for dependency resolution
hooks.mdActions and filters

Declaring Dependencies

Plugins declare dependencies via the Requires Plugins header:

php
/**
 * Plugin Name: My Plugin
 * Requires Plugins: woocommerce, jetpack
 */

Dependencies are listed as comma-separated slugs matching WordPress.org format.

Initialization Flow

plugins_loaded
    └── WP_Plugin_Dependencies::initialize()
            ├── read_dependencies_from_plugin_headers()
            │       ├── Parse 'Requires Plugins' headers
            │       ├── Sanitize slugs via wp_plugin_dependencies_slug filter
            │       └── Build dependency/dependent maps
            └── get_dependency_api_data()
                    └── Fetch plugin info from WordPress.org API

Dependency Resolution

Plugin Activation Check
    ├── has_dependencies( $plugin_file )
    │       └── Does plugin require other plugins?
    ├── has_unmet_dependencies( $plugin_file )
    │       └── Are any dependencies missing/inactive?
    ├── has_circular_dependency( $plugin_file )
    │       └── Detect A→B→A loops
    └── get_dependency_filepath( $slug )
            └── Find installed dependency location

Key Concepts

TermDescription
DependencyA plugin that another plugin requires
DependentA plugin that requires another plugin
SlugPlugin identifier matching WordPress.org format (lowercase, hyphenated)
FilepathPlugin file relative to plugins directory (e.g., woocommerce/woocommerce.php)

Admin Integration

The class displays admin notices for:

  • Unmet dependencies (missing or inactive required plugins)
  • Circular dependencies (plugins that depend on each other)

AJAX handler validates dependencies after plugin installation.