Массив $GLOBALS в WordPress
Есть ли файл, в котором WordPress определяет массив $GLOBALS
?
Мне просто интересно, для чего WordPress его использует и с какой целью.
Вот и все!

Я не уверен, что все эти переменные являются глобальными в WordPress, но я провёл быстрый поиск по файлам WordPress и попытался извлечь все глобальные переменные, которые смог найти.
Вот список, который я составил. Он может быть не идеальным, но *надеюсь*, отражает множество ключей $GLOBALS
, используемых WordPress. Он не учитывает глобализированные переменные, которые не объявлены явно как $GLOBAL
, но всё же имеют глобальную область видимости.
$GLOBALS['_menu_item_sort_prop']
$GLOBALS['_wp_sidebars_widgets']
$GLOBALS['blog_id']
$GLOBALS['body_id']
$GLOBALS['comment']
$GLOBALS['comment_depth']
$GLOBALS['content_width']
$GLOBALS['current_site']
$GLOBALS['current_user']
$GLOBALS['custom_background']
$GLOBALS['custom_image_header']
$GLOBALS['debug_bar']
$GLOBALS['editor_styles']
$GLOBALS['is_winIE']
$GLOBALS['link']
$GLOBALS['login_grace_period']
$GLOBALS['month']
$GLOBALS['month_abbrev']
$GLOBALS['more']
$GLOBALS['post']
$GLOBALS['post_type']
$GLOBALS['posts']
$GLOBALS['query_string']
$GLOBALS['request']
$GLOBALS['single']
$GLOBALS['submenu']
$GLOBALS['tab']
$GLOBALS['type']
$GLOBALS['weekday']
$GLOBALS['weekday_abbrev']
$GLOBALS['weekday_initial']
$GLOBALS['wp_admin_bar']
$GLOBALS['wp_filter']
$GLOBALS['wp_object_cache']
$GLOBALS['wp_post_types']
$GLOBALS['wp_query']
$GLOBALS['wp_styles']
$GLOBALS['wp_taxonomies']
$GLOBALS['wp_the_query']
$GLOBALS['wp_version']
Если вы хотите получить лучшее представление о содержимом глобального массива, вы можете запустить что-то вроде следующего кода, чтобы вывести все переменные, так как приведённый выше подход очевидно несовершенен, поскольку глобальные переменные определяются разными способами.
add_action( 'shutdown', 'print_them_globals' );
function print_them_globals() {
ksort( $GLOBALS );
echo '<ol>';
echo '<li>'. implode( '</li><li>', array_keys( $GLOBALS ) ) . '</li>';
echo '</ol>';
}
Это должно дать вам более полный список переменных в глобальной области видимости.
Надеюсь, это будет полезно. :)

++++++ wp_filesystem, wp_rewrite, wp_registered_widgets, wp_registered_sidebars, wpdb, current_screen, pagenow, is_IE, is_gecko, is_opera, is_iphone и так далее..., authordata, wp_roles, wp_scripts, _wp_using_ext_object_cache.. Их, вероятно, сотни. Код — это Поэзия :)

Конечно, в глобальной области видимости оказывается гораздо больше переменных, но они определены не так, поэтому их невозможно учесть в моём регулярном выражении.

Думаю, также стоит отметить, что если вы объявляете ЛЮБУЮ переменную в глобальной области видимости, она автоматически добавляется в массив $GLOBALS без необходимости явного указания $GLOBALS[
, поэтому поиск через grep вряд ли сможет найти все глобальные переменные в WordPress.

@steven_desu: Кажется, ты хотел добавить этот комментарий к ответу t31os.

Технически это был не grep, а поиск по регулярному выражению во всех файлах директории WordPress с помощью Notepad++. Мой запрос выглядел примерно так: $GLOBALS([^, ]+)([, ]+)
... что дало множество результатов, которые я затем скопировал, вставил и отфильтровал, удалив все лишние данные.

$GLOBALS
— это ассоциативный массив, содержащий ссылки на все переменные, определённые в глобальной области видимости. Это встроенный инструмент языка PHP.
Глобальные переменные можно определить, просто добавив новый элемент в массив $GLOBALS
следующим образом:
$GLOBALS['foo'] = 'foo content';
Глобальные переменные WordPress используются для обмена данными между файлами. Они не определены в каком-то конкретном месте, но некоторые из наиболее важных можно найти здесь: http://codex.wordpress.org/Global_Variables
PHP упрощает использование $GLOBALS
, позволяя обращаться к элементам массива просто объявив их с помощью ключевого слова global
.
global $foo;
$foo = 'foo new content';
эквивалентно:
$GLOBALS['foo'] = 'foo new content';
Обратите внимание: если переменная $foo
не была объявлена как глобальная, она не будет связана с глобальной областью видимости.
Дополнительные материалы по теме: http://www.php.net/manual/en/reserved.variables.globals.php

Если при попытке вывести все $GLOBALS
вы получаете ошибку 'allowed memory exceeded' или что-то подобное, добавьте этот код в functions.php:
if(!function_exists("print_all_globals")){
function print_all_globals() {
$test = array_keys($GLOBALS);
echo "<pre style='background:blue;color:white;'>";
print_r($test);
echo "</pre>";
exit;
}
add_action('wp_enqueue_scripts','print_all_globals');
}
