WordPress Version: 6.3
/**
* Retrieves an array of active and valid plugin files.
*
* While upgrading or installing WordPress, no plugins are returned.
*
* The default directory is `wp-content/plugins`. To change the default
* directory manually, define `WP_PLUGIN_DIR` and `WP_PLUGIN_URL`
* in `wp-config.php`.
*
* @since 3.0.0
* @access private
*
* @return string[] Array of paths to plugin files relative to the plugins directory.
*/
function wp_get_active_and_valid_plugins()
{
$plugins = array();
$active_plugins = (array) get_option('active_plugins', array());
// Check for hacks file if the option is enabled.
if (get_option('hack_file') && file_exists(ABSPATH . 'my-hacks.php')) {
_deprecated_file('my-hacks.php', '1.5.0');
array_unshift($plugins, ABSPATH . 'my-hacks.php');
}
if (empty($active_plugins) || wp_installing()) {
return $plugins;
}
$network_plugins = is_multisite() ? wp_get_active_network_plugins() : false;
foreach ($active_plugins as $plugin) {
if (!validate_file($plugin) && str_ends_with($plugin, '.php') && file_exists(WP_PLUGIN_DIR . '/' . $plugin) && (!$network_plugins || !in_array(WP_PLUGIN_DIR . '/' . $plugin, $network_plugins, true))) {
$plugins[] = WP_PLUGIN_DIR . '/' . $plugin;
}
}
/*
* Remove plugins from the list of active plugins when we're on an endpoint
* that should be protected against WSODs and the plugin is paused.
*/
if (wp_is_recovery_mode()) {
$plugins = wp_skip_paused_plugins($plugins);
}
return $plugins;
}