Array-ul $GLOBALS în WordPress: Utilizare și Scop

29 iul. 2011, 00:34:42
Vizualizări: 14K
Voturi: 11

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!

2
Comentarii

Eram și eu curios și am găsit manualul. Este aceasta o listă completă a variabilelor globale $GLOBALS? https://developer.wordpress.org/apis/handbook/global-variables/

Olivia Chen Olivia Chen
6 aug. 2020 23:45:34

@OliviaChen Acolo am ajuns și eu prima dată, dar pare să îi lipsească variabile globale cruciale.

Márton Tamás Márton Tamás
22 dec. 2020 19:56:21
Toate răspunsurile la întrebare 4
3
17

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. :)

29 iul. 2011 15:33:53
Comentarii

++++++ 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 :)

onetrickpony onetrickpony
29 iul. 2011 18:47:58

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.

t31os t31os
29 iul. 2011 19:05:40

Am adăugat o funcție în răspunsul meu care va oferi o listă mai cuprinzătoare a variabilelor globale... :)

t31os t31os
29 iul. 2011 19:13:19
3

Din păcate, nu.

Definițiile variabilelor globale sunt împrăștiate prin întreaga bază de cod.

De asemenea, nu există documentație pentru majoritatea acestora.

29 iul. 2011 00:41:37
Comentarii

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.

stevendesu stevendesu
29 iul. 2011 16:59:10

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

scribu scribu
29 iul. 2011 17:30:57

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.

t31os t31os
29 iul. 2011 18:47:45
0

$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

8 dec. 2013 18:19:00
0

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');
}
25 aug. 2022 19:15:47