get_plugins() WP 1.5.0

Отримує всі дані плагінів (активних та неактивних): файл, назву, автор тощо. Працює з папкою плагінів.

Функція збере дані всіх основних файлів плагінів. Це файли, в яких є PHP коментарі, що описують плагін (заголовки плагіна). У дані потраплять назви знайдених файлів і всі дані з коментарі самого файлу.

Функція кешує результат, коли вказано параметр $plugin_folder .

WordPress працює з плагінами, розташованими тільки в каталогах: wp-content/pluginsі wp-content/mu-plugins. Функція шукає файли лише у цих двох каталогах, тому рекомендується, щоб усі файли плагінів розташовувалися у цих каталогах.

Скрізь крім адмінки, вимагає підключення файлу:

require_once ABSPATH. 'wp-admin/includes/plugin.php';

Аналогічна функція отримання даних тем: wp_get_themes()

Працює на основі:
get_plugin_data()
1 раз – 0.008743 сек
(дуже повільно) | 50000 разів – 2.13 сек
(швидко) |
PHP 7.1.2, WP 4.7.4

Хуків немає.

Повертає

Массив[]. Масив, де ключ – це шлях до файлу, а значення – це масив даних плагіна.

Використання

get_plugins($plugin_folder);
$plugin_folder
(рядок)
Назва папки окремого плагіна.


За замовчуванням: ”

Приклади

0

#1 Отримаємо дані всіх плагінів

Наступний код поверне дані всіх (не тільки активних) плагінів, встановлених на вашому сайті.

// Перевіримо, чи зареєстрована функція 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] => Це не є тільки Plug-in, це символізує шпильку і ентузіазм генерації центру, що входять до двох слів sung most, знаменитий Louis Armstrong: Hello, Dolly. Якщо ви activated you wrandomly see a lyric from <cite>Hello, Dolly</cite> в нижній правому повідомленні вашої команди на цій сторінці.
			[Author] => Matt Mullenweg
			[AuthorURI] => http://ma.tt/
			[TextDomain] =>
			[DomainPath] =>
			[Network] =>
			[Title] => Hello Dolly
			[AuthorName] => Matt Mullenweg

)
...
...

список змін

З версії 1.5.0Введено.

Код get_plugins() WP 6.0.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;
	}

	// Files in wp-content/plugins directory.
	$plugins_dir = @opendir( $plugin_root );
	$plugin_files = array();

	if ( $plugins_dir ) {
		while ( ( $file = readdir( $plugins_dir ) ) !== false ) {
			if ( '.' === substr( $file, 0, 1 ) ) {
				continue;
			}

			if ( is_dir( $plugin_root . '/' . $file ) ) {
				$plugins_subdir = @opendir( $plugin_root . '/' . $file );

				if ( $plugins_subdir ) {
					while (( $subfile = readdir( $plugins_subdir ) ) !== false ) {
						if ( '.' === substr( $subfile, 0, 1 ) ) {
							continue;
						}

						if ( '.php' === substr( $subfile, -4 ) ) {
							$plugin_files[] = "$file/$subfile";
						}
					}

					closedir($plugins_subdir);
				}
			} else {
				if ( '.php' === substr( $file, -4 ) ) {
					$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;
		}

		// Do not apply markup/translate as it will be cached.
		$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;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *