Функция GET_PLUGINS() ─ WP 1.5.0
Эта функция позволяет получить данные по всем установленным плагинам (как активным, так и неактивным): файл, имя, автор и т.д. Она работает с Каталогом плагинов.
Описание функции
Функция собирает данные из всех основных файлов плагинов. Это те файлы, которые содержат PHP-комментарии, описывающие сам плагин (так называемые заголовки плагина). Данные будут включать относительный путь к файлу плагина и всю информацию из комментария этого файла.
Важные моменты:
- Местоположение плагинов: WordPress работает только с плагинами, расположенными в директориях
wp-content/pluginsиwp-content/mu-plugins. Рекомендуется хранить все файлы плагинов в этих директориях. - Похожая функция: Существует похожая функция —
wp_get_themes(). - Кэширование: Функция кэширует результат, если указан параметр
$plugin_folder.
Подключение функции
Для того чтобы использовать эту функцию на сайте или в ранних стадиях работы, следует подключить следующий файл:
require_once ABSPATH . 'wp-admin/includes/plugin.php';
Возвращаемое значение
Функция возвращает массив данных плагинов, структурированный по названию файла плагина. Подробности можно найти в функции get_plugin_data().
Применение функции
get_plugins( $plugin_folder );
где $plugin_folder (тип string) — это относительный путь к папке с плагином. По умолчанию он пустой.
Пример использования: получение данных всех плагинов
Следующий код вернёт данные всех установленных (возможно, неактивных) плагинов.
// Проверяем, зарегистрирована ли функция get_plugins(). Если вы вне панели.
// Обычно get_plugins() работает только в админке.
if ( ! function_exists( 'get_plugins' ) ) {
// Подключаем файл с get_plugins().
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
// Получаем данные плагинов
$all_plugins = get_plugins();
// Сохраняем данные в лог ошибок, где можно увидеть полученный массив
error_log( print_r( $all_plugins, true ) );
В лог-файле будет содержаться что-то вроде:
Array(
[hello-dolly/hello.php] => Array
(
[Name] => Hello Dolly
[PluginURI] => http://wordpress.org/extend/plugins/hello-dolly/
[Version] => 1.6
[Description] => Это не просто плагин, он символизирует надежду и энтузиазм целого поколения, выраженные в двух словах, которые наиболее известны благодаря Луи Армстронгу: Hello, Dolly. Когда плагин активирован, вы будете видеть случайные строки из Hello, Dolly в верхнем правом углу вашего экрана администрирования на каждой странице.
[Author] => Мэтт Малленвег
[AuthorURI] => http://ma.tt/
[TextDomain] =>
[DomainPath] =>
[Network] =>
[Title] => Hello Dolly
[AuthorName] => Мэтт Малленвег
)
)
Добавьте свой собственный пример.
История изменений
- С версии 1.5.0 — впервые представлена.
Код функции GET_PLUGINS()
Вот код функции get_plugins() на версии WP 6.7.2:
function get_plugins( $plugin_folder = '' ) {
$cache_plugins = wp_cache_get( 'plugins', 'plugins' );
if ( ! $cache_plugins ) {
$cache_plugins = array();
}
if ( isset( $cache_plugins[ $plugin_folder ] ) ) {
return $cache_plugins[ $plugin_folder ];
}
$wp_plugins = array();
$plugin_root = WP_PLUGIN_DIR; // Основная директория плагинов.
if ( ! empty( $plugin_folder ) ) {
$plugin_root .= $plugin_folder;
}
// Открываем директорию wp-content/plugins.
$plugins_dir = @opendir( $plugin_root );
$plugin_files = array();
if ( $plugins_dir ) {
while ( ( $file = readdir( $plugins_dir ) ) !== false ) {
if ( str_starts_with( $file, '.' ) ) {
continue; // Игнорируем скрытые файлы.
}
if ( is_dir( $plugin_root . '/' . $file ) ) {
$plugins_subdir = @opendir( $plugin_root . '/' . $file );
if ( $plugins_subdir ) {
while ( ( $subfile = readdir( $plugins_subdir ) ) !== false ) {
if ( str_starts_with( $subfile, '.' ) ) {
continue; // Игнорируем скрытые файлы.
}
if ( str_ends_with( $subfile, '.php' ) ) {
$plugin_files[] = "$file/$subfile"; // Добавляем файл плагина.
}
}
closedir( $plugins_subdir );
}
} elseif ( str_ends_with( $file, '.php' ) ) {
$plugin_files[] = $file; // Добавляем файл плагина.
}
}
closedir( $plugins_dir );
}
if ( empty( $plugin_files ) ) {
return $wp_plugins; // Если не найдено файлов, возвращаем пустой массив.
}
foreach ( $plugin_files as $plugin_file ) {
if ( ! is_readable( "$plugin_root/$plugin_file" ) ) {
continue; // Проверяем доступность файла.
}
// Не применяем разметку/перевод так как это будет кешироваться.
$plugin_data = get_plugin_data( "$plugin_root/$plugin_file", false, false );
if ( empty( $plugin_data['Name'] ) ) {
continue; // Если имя пустое, пропускаем.
}
$wp_plugins[ plugin_basename( $plugin_file ) ] = $plugin_data; // Добавляем данные плагина в массив.
}
uasort( $wp_plugins, '_sort_uname_callback' ); // Сортируем плагины.
$cache_plugins[ $plugin_folder ] = $wp_plugins; // Сохраняем данные в кеш.
wp_cache_set( 'plugins', $cache_plugins, 'plugins' ); // Обновляем кеш.
return $wp_plugins; // Возвращаем данные плагинов.
}
Связанные функции
activate_plugins()deactivate_plugins()get_plugin_data()is_plugin_active()plugin_basename()validate_plugin_requirements()wp_get_active_and_valid_plugins()