Array-ul $GLOBALS în WordPress: Utilizare și Scop
Există vreun fișier în WordPress unde este definit $GLOBALS
?
Sunt doar curios pentru ce folosește WordPress acest array și cu ce scop.
Atât!

Nu sunt sigur dacă toate acestea sunt variabile globale WordPress, dar am făcut o căutare rapidă prin fișierele WordPress și am încercat să extrag toate variabilele globale pe care le-am putut găsi.
Acesta este lista pe care am compilat-o. Poate nu este perfectă, dar ar trebui *sperăm* să reprezinte o mare parte din cheile $GLOBALS
pe care le folosește WordPress. Nu va include variabile globalizate care nu sunt definite explicit ca $GLOBAL
, dar care totuși au scop 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']
Dacă dorești să obții o imagine mai bună a tuturor elementelor din array-ul global, poți rula ceva de genul următor pentru a obține o listă, deoarece abordarea de mai sus este evident imperfectă, întrucât variabilele globale sunt definite în mai multe moduri.
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>';
}
Aceasta ar trebui să îți ofere o listă mai cuprinzătoare a variabilelor din scopul global.
Sper că acest lucru este util. :)

++++++ wp_filesystem, wp_rewrite, wp_registered_widgets, wp_registered_sidebars, wpdb, current_screen, pagenow, is_IE, is_gecko, is_opera, is_iphone etc..., authordata, wp_roles, wp_scripts, _wp_using_ext_object_cache.. Probabil sunt sute de variabile globale. Codul este Poezie :)

Desigur, există mult mai multe variabile care ajung în scope-ul global, dar ele nu sunt definite în același mod, așa că este imposibil să le includ în modelul meu regex.

Cred că ar trebui menționat și faptul că, dacă declari ORICE variabilă în scope-ul global, aceasta este adăugată automat în array-ul $GLOBALS fără a fi nevoie să scrii vreodată $GLOBALS[
, așa că o căutare cu grep nu ar putea returna toate variabilele globale din WordPress.

@steven_desu: Cred că voiai să postezi asta ca răspuns la comentariul lui t31os.

Nu a fost grep, tehnic vorbind a fost o potrivire cu regex pe toate fișierele din directorul de instalare WordPress folosind Notepad++, căutarea mea a fost ceva de genul $GLOBALS([^, ]+)([, ]+)
... care mi-a returnat o grămadă de rezultate, pe care le-am copiat și lipit, apoi am eliminat toate datele irelevante.

$GLOBALS
este un array asociativ care conține referințe către toate variabilele definite în prezent în domeniul global. Acesta este un instrument al limbajului PHP.
Variabilele globale pot fi definite simplu prin crearea unui nou element în array-ul $GLOBALS
astfel:
$GLOBALS['foo'] = 'conținut foo';
Variabilele globale WordPress sunt folosite pentru a partaja date între fișiere. Ele nu sunt definite într-un loc anume, dar puteți găsi unele dintre cele mai importante aici: http://codex.wordpress.org/Global_Variables
PHP facilitează utilizarea $GLOBALS
permițându-vă să accesați elementele prin simpla declarare a acestora folosind cuvântul cheie global
.
global $foo;
$foo = 'conținut nou foo';
este același lucru cu:
$GLOBALS['foo'] = 'conținut nou foo';
Vă rugăm să rețineți că dacă nu ați definit $foo
ca global, aceasta nu va fi legată de domeniul variabilelor globale.
Câteva lecturi suplimentare despre acest subiect: http://www.php.net/manual/en/reserved.variables.globals.php

Dacă încercați să afișați toate variabilele $GLOBALS
și primiți o eroare 'allowed memory exceeded' sau ceva similar, atunci introduceți acest cod în fișierul 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');
}
