Title: WP_Plugin_Dependencies::check_for_circular_dependencies
Published: April 3, 2024
Last modified: May 20, 2026

---

# WP_Plugin_Dependencies::check_for_circular_dependencies( array $dependents, array $dependencies ): array

## In this article

 * [Parameters](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/?output_format=md#wp--skip-link--target)

Checks for circular dependencies.

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/?output_format=md#parameters)󠁿

 `$dependents`arrayrequired

Array of dependent plugins.

`$dependencies`arrayrequired

Array of plugins dependencies.

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/?output_format=md#return)󠁿

 array A circular dependency pairing, or an empty array if none exists.

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/?output_format=md#source)󠁿

    ```php
    protected static function check_for_circular_dependencies( $dependents, $dependencies ) {
    	$circular_dependencies_pairs = array();

    	// Check for a self-dependency.
    	$dependents_location_in_its_own_dependencies = array_intersect( $dependents, $dependencies );
    	if ( ! empty( $dependents_location_in_its_own_dependencies ) ) {
    		foreach ( $dependents_location_in_its_own_dependencies as $self_dependency ) {
    			self::$circular_dependencies_slugs[] = $self_dependency;
    			$circular_dependencies_pairs[]       = array( $self_dependency, $self_dependency );

    			// No need to check for itself again.
    			unset( $dependencies[ array_search( $self_dependency, $dependencies, true ) ] );
    		}
    	}

    	/*
    	 * Check each dependency to see:
    	 * 1. If it has dependencies.
    	 * 2. If its list of dependencies includes one of its own dependents.
    	 */
    	foreach ( $dependencies as $dependency ) {
    		// Check if the dependency is also a dependent.
    		$dependency_location_in_dependents = array_search( $dependency, self::$dependent_slugs, true );

    		if ( false !== $dependency_location_in_dependents ) {
    			$dependencies_of_the_dependency = self::$dependencies[ $dependency_location_in_dependents ];

    			foreach ( $dependents as $dependent ) {
    				// Check if its dependencies includes one of its own dependents.
    				$dependent_location_in_dependency_dependencies = array_search(
    					$dependent,
    					$dependencies_of_the_dependency,
    					true
    				);

    				if ( false !== $dependent_location_in_dependency_dependencies ) {
    					self::$circular_dependencies_slugs[] = $dependent;
    					self::$circular_dependencies_slugs[] = $dependency;
    					$circular_dependencies_pairs[]       = array( $dependent, $dependency );

    					// Remove the dependent from its dependency's dependencies.
    					unset( $dependencies_of_the_dependency[ $dependent_location_in_dependency_dependencies ] );
    				}
    			}

    			$dependents[] = $dependency;

    			/*
    			 * Now check the dependencies of the dependency's dependencies for the dependent.
    			 *
    			 * Yes, that does make sense.
    			 */
    			$circular_dependencies_pairs = array_merge(
    				$circular_dependencies_pairs,
    				self::check_for_circular_dependencies( $dependents, array_unique( $dependencies_of_the_dependency ) )
    			);
    		}
    	}

    	return $circular_dependencies_pairs;
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/class-wp-plugin-dependencies.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-includes/class-wp-plugin-dependencies.php#L793)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-includes/class-wp-plugin-dependencies.php#L793-L853)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/?output_format=md#related)󠁿

| Uses | Description | 
| [WP_Plugin_Dependencies::check_for_circular_dependencies()](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/)`wp-includes/class-wp-plugin-dependencies.php` |

Checks for circular dependencies.

  |

| Used by | Description | 
| [WP_Plugin_Dependencies::get_circular_dependencies()](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/get_circular_dependencies/)`wp-includes/class-wp-plugin-dependencies.php` |

Gets circular dependency data.

  | 
| [WP_Plugin_Dependencies::check_for_circular_dependencies()](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/)`wp-includes/class-wp-plugin-dependencies.php` |

Checks for circular dependencies.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_plugin_dependencies/check_for_circular_dependencies/?output_format=md#changelog)󠁿

| Version | Description | 
| [6.5.0](https://developer.wordpress.org/reference/since/6.5.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_plugin_dependencies%2Fcheck_for_circular_dependencies%2F)
before being able to contribute a note or feedback.