get_file_data

Получает данные файла указанные в PHP комментариях файла.

Ищет метаданные в первых 8kiB (6000-8000 знаков) информации файла. Данные должны быть указаны в многострочном PHP комментарии (/*данные*/), как это делается в файлах плагина или темы. Каждая часть данных должна быть на отдельной строке. В значении не должно быть переносов строк, потому что значение берется до первого переноса. См. пример 1.

Работает на раннем этапе загрузки WordPress, еще до константы SHORTINIT.
✈ 1 раз = 0.000433с = быстро | 50000 раз = 0.66с = очень быстро PHP 7.0.8, WP 4.6.1
Хуки из функции:
extra_(context)_headers
Возвращает

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

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

get_file_data( $file, $default_headers, $context );
$file(строка) (обязательный)
Полный путь до файла.
$default_headers(массив) (обязательный)
Список значений которые должна возвратить функция. В формате: array(‘возвращаемый ключ’ => ‘искомый ключ в файле’).
$context(строка)
Если указать любое значение, то будет срабатывать хук ‘extra_{$context}_headers‘, через который можно дополнить параметр $default_headers.
По умолчанию: ”

Примеры

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

Допустим мы создали плагин и в основном файле он имеет такие комментарии:

<?php
function get_file_data( $file, $default_headers, $context = '' ) {
	// We don't need to write to the file, so just open for reading.
	$fp = fopen( $file, 'r' );

	// Pull only the first 8kiB of the file in.
	$file_data = fread( $fp, 8192 );

	// PHP will close file handle, but we are good citizens.
	fclose( $fp );

	// 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 the 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.
	 */
	if ( $context && $extra_headers = apply_filters( "extra_{$context}_headers", array() ) ) {
		$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/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) && $match[1] )
			$all_headers[ $field ] = _cleanup_header_comment( $match[1] );
		else
			$all_headers[ $field ] = '';
	}

	return $all_headers;
}