get_file_data() WP 2.9.0

Отримує дані файлу, зазначені в PHP коментарях файлу.

Шукає метадані у перших 8kiB (6000-8000 знаків) інформації файлу. Дані мають бути вказані в багаторядковому PHP коментарі ( /*дані*/ ), як це робиться у файлах плагіна або теми. Кожна частина даних має бути на окремому рядку. У значеннях не повинно бути перенесення рядків, тому що значення береться до першого перенесення. Див. Приклад 1.

Таким чином, якщо дані файлу (плагіна, теми) не знаходяться в межах перших 8kiB, автору плагіна/теми потрібно виправити свій файл і перемістити заголовки даних нагору.

Визначено на ранньому етапі завантаження WordPress, ще до константи SHORTINIT .

1 раз – 0.000001 сек
(швидкість світла) | 50000 разів – 0.61 сек
(дуже швидко) |
PHP 7.4.8, WP 5.6

Хуки з функції

Повертає

Строку[]. Масив отриманих даних із заголовка файлу у форматі: Ключ => Значение.

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

get_file_data($file, $default_headers, $context);
$file
(рядок) (обов’язковий)
Повний шлях до файлу.
$default_headers
(масив) (обов’язковий)

Список значень, які має повернути функція, у форматі: [ $field => $regex ], де:

  • $field– індекс масива, що повертається, в якому буде знайдене значення $regex .
  • $regex– Частина регулярного виразу відповідає за назву змінної. Наприклад, якщо тут вказати Description, то регулярка для пошуку набуде такого вигляду: '/^[ t/*#@]*Description:(.*)$/mi'.

Вказане значення $regex обробляється функцією preg_quote() , тому будь-які спецсимволи регулярного виразу будуть екрановані.

$context
(рядок)
Якщо вказати, буде спрацьовувати хук
extra_{$context}_headers , через який можна доповнити параметр
$default_headers .


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

Приклади

0

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

Допустимо ми створили плагін і в основному файлі він має такі коментарі:

/*
Plugin Name: Назва
Description: Опис
Автор: Kama
Version: 1.0
*/

Тоді, дивіться як спрацює код:

// Шлях до основного файлу плагіна.
// У файлі його можна отримати, використовуючи магічну константу __FILE__
$file = '/home/example.com/wp-content/plugins/myplugin/index.php';
$get_headers = [
	'ver' => 'Version',
	'author' => 'Author',
	'name' => 'Plugin Name',
	'foo' => 'bar'
];

$ data = get_file_data ($ file, $ get_headers);

/* $data міститиме:
Array (
	[ver] => 1.0
	[author] => Kama
	[name] => Назва
	[foo] =>
)
*/
0

#2 Динамічна версія плагіна

Допустимо ми пишемо плагін і у нас є Константа PLUGIN_VERSION . Щоразу, при зміні версії плагіна в коментарях, нам потрібно не забути змінити її в константі. Це незручність можна обійти, використавши цю функцію. Для цього на початку плагіна під коментарями використовуємо функцію:

/*
Plugin Name: Назва плагіна
Plugin URI: http://wp-kama.ru
Description: Опис плагіна
Автор: Kama
Version: 1.0
*/

$data = get_file_data( __FILE__, ['ver'=>'Version'] );

define( 'PLUGIN_VERSION', $data['ver'] );

список змін

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

get file data WP 6.0.2

function get_file_data( $file, $default_headers, $context = '' ) {
	// Pull only the first 8 KB of the file in.
	$ file_data = file_get_contents ($ file, false, null, 0, 8 * KB_IN_BYTES );

	if ( false === $file_data ) {
		$file_data = '';
	}

	// Make sure we catch CR-only line endings.
	$file_data = str_replace("r", "n", $file_data);

	/**
	 * Filters extra file headers by context.
	 *
	 * The dynamic portion of hook name, `$context`, refers to
	 * the context where extra headers might be loaded.
	 *
	 * @ Since 2.9.0
	 *
	 * @param array $extra_context_headers Empty array by default.
	 */
	$extra_headers = $context? apply_filters( "extra_{$context}_headers", array() ) : array();
	if ($extra_headers) {
		$extra_headers = array_combine( $extra_headers, $extra_headers ); // Keys equal values.
		$all_headers = array_merge( $extra_headers, (array) $default_headers );
	} else {
		$all_headers = $default_headers;
	}

	foreach ( $all_headers as $field => $regex ) {
		if ( preg_match( '/^(?:[ t]*<?php)?[ t/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$ /mi', $file_data, $match ) && $match[1] ) {
			$all_headers[ $field ] = _cleanup_header_comment( $match[1] );
		} else {
			$all_headers[ $field ] = '';
		}
	}

	return $all_headers;
}

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

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