WordPress как на ладони
rgbcode is looking for WordPress developers. Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

get_plugin_data()WP 1.5.0

Получает данные плагина (указанные в заголовках) по переданному пути на основной файл плагина.

Все данные берутся из заголовков плагина. Данные плагина должны располагаться на отдельной строке. В описании плагинов не должно быть переносов строк, иначе только часть описания будет показана. Формат заголовка такой:

/*
 * Plugin Name: Название
 * Plugin URI: Ссылка на инфо о плагине
 * Description: Описание
 * Author: Имя автора
 * Author URI: Ссылка на автора
 * Version: Версия плагина
 * Requires at least: 5.8
 * Requires PHP: 7.4
 * Text Domain: Идентификатор для данных перевода. Указывается в plugin_text_domain()
 * Domain Path: Путь до файла перевода. Нужен если файл не в той же папки в которой
 *              файл с этими данными. Например, .mo файл находится в папке plugin/lang,
 *              а файл плагина в plugin/file.php, тогда тут указываем "lang"
 * Network: Укажите "Network: true" для возможности активировать плагин
 *          по все сети сайтов (для Мультисайтовой сборки).
 * Update URI: https://example.com/link_to_update
 */

Функция обрабатывает только первые 8kiB (6000-8000 символов) информации (см. get_file_data()), и если данные плагина получаются больше, то автору придется их уменьшить или переместить данные плагина наверх (некоторые авторы перед данными добавляют информацию о лицензии и т.п.).

Функция работает только в админ-панели. Кроме этого, работает не сразу, а где-то начиная с события admin_init т.е. во время событий: plugins_loaded, init, wp_loaded функция еще не определена.

В качестве альтернативы, когда нужно получить данные пораньше, можно использовать похожую функцию get_file_data().

Если $markup = true или $translate = true (как по умолчанию), функция косвенно вызывает wptexturize(), потенциально ломая другие плагины, если это происходит до хука init.

Работает на основе: get_file_data()
Основа для: get_plugins()

Хуков нет.

Возвращает

Массив. Массив данных:

Array (
	[Name]        => Democracy Poll
	[PluginURI]   => http://wp-kama.ru/id_67/democracy-poll.html
	[Version]     => 4.5.4
	[Description] => Позволяет создавать опросы.
	[Author]      => <a href="/">Kama</a>
	[AuthorURI]   => http://wp-kama.ru/
	[AuthorName]  => Kama
	[TextDomain]  => dem
	[DomainPath]  => languages
	[Network]     =>
	[Title]       => <a href="/id_67/democracy-poll.html">Democracy Poll</a>
	[RequiresWP]  => 5.5
	[RequiresPHP] => 7.0
)

Мапинг срок: значение массива - это строка которая должна быть в файле, ключ - соответствует ключу возвращаемого массива:

$default_headers = array(
	'Name'        => 'Plugin Name',
	'PluginURI'   => 'Plugin URI',
	'Version'     => 'Version',
	'Description' => 'Description',
	'Author'      => 'Author',
	'AuthorURI'   => 'Author URI',
	'TextDomain'  => 'Text Domain',
	'DomainPath'  => 'Domain Path',
	'Network'     => 'Network',
	'RequiresWP'  => 'Requires at least',
	'RequiresPHP' => 'Requires PHP',
	'UpdateURI'   => 'Update URI',
);

Использование

get_plugin_data( $plugin_file, $markup, $translate );
$plugin_file(строка) (обязательный)
Путь к основному файлу плагина. Пр: __FILE__.
$markup(логический)
Выводить HTML разметку в данных (true) или нет (false).
По умолчанию: true
$translate(логический)
Переводить данные или нет.
По умолчанию: true

Примеры

0

#1 Получим данные

Пример, как можно получить данные плагина при создании плагина.

Хотя, я что-то с трудом могу представить, где это может понадобиться, поэтому пусть это будет демонстрационный пример:

add_action('admin_init', function(){
	$data = get_plugin_data(__FILE__);
	echo $data['Name']; // выведет название плагина
} );

Список изменений

С версии 1.5.0 Введена.
С версии 5.3.0 Added support for Requires at least and Requires PHP headers.
С версии 5.8.0 Added support for Update URI header.

Код get_plugin_data() WP 6.4.3

function get_plugin_data( $plugin_file, $markup = true, $translate = true ) {

	$default_headers = array(
		'Name'        => 'Plugin Name',
		'PluginURI'   => 'Plugin URI',
		'Version'     => 'Version',
		'Description' => 'Description',
		'Author'      => 'Author',
		'AuthorURI'   => 'Author URI',
		'TextDomain'  => 'Text Domain',
		'DomainPath'  => 'Domain Path',
		'Network'     => 'Network',
		'RequiresWP'  => 'Requires at least',
		'RequiresPHP' => 'Requires PHP',
		'UpdateURI'   => 'Update URI',
		// Site Wide Only is deprecated in favor of Network.
		'_sitewide'   => 'Site Wide Only',
	);

	$plugin_data = get_file_data( $plugin_file, $default_headers, 'plugin' );

	// Site Wide Only is the old header for Network.
	if ( ! $plugin_data['Network'] && $plugin_data['_sitewide'] ) {
		/* translators: 1: Site Wide Only: true, 2: Network: true */
		_deprecated_argument( __FUNCTION__, '3.0.0', sprintf( __( 'The %1$s plugin header is deprecated. Use %2$s instead.' ), '<code>Site Wide Only: true</code>', '<code>Network: true</code>' ) );
		$plugin_data['Network'] = $plugin_data['_sitewide'];
	}
	$plugin_data['Network'] = ( 'true' === strtolower( $plugin_data['Network'] ) );
	unset( $plugin_data['_sitewide'] );

	// If no text domain is defined fall back to the plugin slug.
	if ( ! $plugin_data['TextDomain'] ) {
		$plugin_slug = dirname( plugin_basename( $plugin_file ) );
		if ( '.' !== $plugin_slug && ! str_contains( $plugin_slug, '/' ) ) {
			$plugin_data['TextDomain'] = $plugin_slug;
		}
	}

	if ( $markup || $translate ) {
		$plugin_data = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup, $translate );
	} else {
		$plugin_data['Title']      = $plugin_data['Name'];
		$plugin_data['AuthorName'] = $plugin_data['Author'];
	}

	return $plugin_data;
}
2 комментария
    Войти