get_plugin_directory_path.php
<?php
if( ! function_exists( 'get_plugin_directory_path') ){
/**
* Get Plugin's Directory Path
*
* Search for a plugin's directory path, based on configuration in the plugin's main plugin
* file. By default if passed search value is a string, will search the `Name` value. To
* search multiple values, or different value to match, pass as an array with key => value.
*
*
* @since @@version
*
* @param string|array $search Value to find plugin based on `Name`, or an array with key => value pairs to match.
* Search is case-insensitive, and will only return if all search values match.
* @param string|bool $const Constant value to pass and check first, before doing search.
*
* @param bool $trailing_slash Whether or not to include trailing slash (default is false)
*
* @return bool|string Returns directory path to plugin if match found, otherwise FALSE if no match found.
*/
function get_plugin_directory_path( $search, $const = false, $trailing_slash = false ){
if( file_exists( $const ) ){
return $const;
}
if ( ! function_exists( 'get_plugins' ) )
require_once ABSPATH . 'wp-admin/includes/plugin.php';
$plugins = get_plugins();
foreach( (array) $plugins as $plugin_path => $readme ){
if( is_array( $search ) ){
// Remove spaces from array keys (keys returned by WordPress have spaces removed)
$search = array_combine( str_replace( ' ', '', array_keys( $search ) ), array_values( $search ) );
// Do case-insensitive comparison between passed search array
$diff_check = array_udiff_uassoc( $search, $readme, 'strcasecmp', 'strcasecmp' );
if( empty( $diff_check ) ){
$path = trailingslashit( WP_PLUGIN_DIR ) . plugin_dir_path( $plugin_path );
return $trailing_slash ? $path : untrailingslashit( $path );
}
} else {
if( strtolower( $readme[ 'Name' ] ) === strtolower( $search ) ){
$path = trailingslashit( WP_PLUGIN_DIR ) . plugin_dir_path( $plugin_path );
return $trailing_slash ? $path : untrailingslashit( $path );
}
}
}
return FALSE;
}
}
No comments yet.