Получение данных о плагинах в WordPress: функция GET_PLUGINS()

Функция 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()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *