Массив $GLOBALS в WordPress

29 июл. 2011 г., 00:34:42
Просмотры: 14K
Голосов: 11

Есть ли файл, в котором WordPress определяет массив $GLOBALS?

Мне просто интересно, для чего WordPress его использует и с какой целью.

Вот и все!

2
Комментарии

Мне тоже было интересно, и я нашел справочник. Это полный список $GLOBALS? https://developer.wordpress.org/apis/handbook/global-variables/

Olivia Chen Olivia Chen
6 авг. 2020 г. 23:45:34

@OliviaChen Я сначала тоже попал туда, но похоже, что там не хватает важных глобальных переменных.

Márton Tamás Márton Tamás
22 дек. 2020 г. 19:56:21
Все ответы на вопрос 4
3
17

Я не уверен, что все эти переменные являются глобальными в 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>';
}

Это должно дать вам более полный список переменных в глобальной области видимости.

Надеюсь, это будет полезно. :)

29 июл. 2011 г. 15:33:53
Комментарии

++++++ 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.. Их, вероятно, сотни. Код — это Поэзия :)

onetrickpony onetrickpony
29 июл. 2011 г. 18:47:58

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

t31os t31os
29 июл. 2011 г. 19:05:40

Добавил функцию в свой ответ, которая даст более полный список глобальных переменных... :)

t31os t31os
29 июл. 2011 г. 19:13:19
3

К сожалению, нет.

Определения глобальных переменных разбросаны по всей кодовой базе.

Для большинства из них также отсутствует документация.

29 июл. 2011 г. 00:41:37
Комментарии

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

stevendesu stevendesu
29 июл. 2011 г. 16:59:10

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

scribu scribu
29 июл. 2011 г. 17:30:57

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

t31os t31os
29 июл. 2011 г. 18:47:45
0

$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

8 дек. 2013 г. 18:19:00
0

Если при попытке вывести все $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');
}
25 авг. 2022 г. 19:15:47