Array $GLOBALS in WordPress

29 lug 2011, 00:34:42
Visualizzazioni: 14K
Voti: 11

Esiste un file in cui WordPress definisce $GLOBALS?

Mi chiedo semplicemente per cosa WordPress lo utilizza e a quale scopo.

È tutto!

2
Commenti

Anch'io ero curioso e ho trovato il manuale. Questa è una lista completa delle variabili $GLOBALS? https://developer.wordpress.org/apis/handbook/global-variables/

Olivia Chen Olivia Chen
6 ago 2020 23:45:34

@OliviaChen È lì che sono finito all'inizio, ma sembra che manchino variabili globali cruciali.

Márton Tamás Márton Tamás
22 dic 2020 19:56:21
Tutte le risposte alla domanda 4
3
17

Non sono sicuro che tutti questi siano globali di WordPress, ma ho fatto una rapida ricerca di tipo grep nei file di WordPress e ho cercato di estrarre tutti i globali che potevo..

Questa è la lista che ho compilato. Potrebbe non essere perfetta, ma dovrebbe *si spera* rappresentare molte delle chiavi $GLOBALS che WordPress utilizza. Non terrà conto delle variabili globalizzate che non sono esplicitamente definite come $GLOBAL, ma che comunque hanno scope globale.

$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']

Se vuoi avere un'idea migliore di tutto ciò che c'è dentro l'array globale potresti eseguire qualcosa come il seguente codice per ottenere una stampa, perché l'approccio sopra era ovviamente imperfetto dato che i globali sono definiti in più di un modo.

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>';
}

Questo dovrebbe darti una lista più completa delle variabili nello scope globale.

Spero sia utile. :)

29 lug 2011 15:33:53
Commenti

++++++ 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.. Ce ne sono probabilmente centinaia. Code is Poetry :)

onetrickpony onetrickpony
29 lug 2011 18:47:58

Certo, ce ne sono molte altre che finiscono nello scope globale, ma non sono definite nello stesso modo, quindi impossibile includerle nel mio pattern regex.

t31os t31os
29 lug 2011 19:05:40

Ho aggiunto una funzione alla mia risposta che fornirà una lista più completa di globali... :)

t31os t31os
29 lug 2011 19:13:19
3

Sfortunatamente, no.

Le definizioni delle variabili globali sono sparse tra il codice.

Non c'è documentazione per la maggior parte di esse, inoltre.

29 lug 2011 00:41:37
Commenti

Penso che si debba anche notare che se dichiari QUALSIASI variabile nello scope globale, viene automaticamente aggiunta all'array $GLOBALS senza mai dover scrivere $GLOBALS[, quindi una ricerca con grep non potrebbe restituire tutte le variabili globali in WordPress.

stevendesu stevendesu
29 lug 2011 16:59:10

@steven_desu: Penso che intendessi pubblicarlo come risposta a t31os.

scribu scribu
29 lug 2011 17:30:57

Non era grep, tecnicamente parlando era una corrispondenza di pattern regex su tutti i file nella directory di installazione di WordPress usando Notepad++, la mia ricerca era qualcosa come $GLOBALS([^, ]+)([, ]+) ... che mi ha dato un mucchio di risultati, che poi ho copiato e incollato, eliminando tutti i dati irrilevanti.

t31os t31os
29 lug 2011 18:47:45
0

$GLOBALS è un array associativo che contiene riferimenti a tutte le variabili attualmente definite nello scope globale. Questo è uno strumento del linguaggio PHP.

Le variabili globali possono essere definite semplicemente creando un nuovo elemento nell'array $GLOBALS in questo modo:

$GLOBALS['foo'] = 'contenuto foo';

Le Globali di WordPress vengono utilizzate per condividere dati tra i file. Non sono definite in un posto specifico ma puoi trovare alcune delle più importanti qui: http://codex.wordpress.org/Global_Variables

PHP rende ancora più semplice l'uso di $GLOBALS permettendoti di accedere agli elementi semplicemente dichiarandoli con la keyword global.

global $foo;
$foo = 'nuovo contenuto foo';

è lo stesso di:

$GLOBALS['foo'] = 'nuovo contenuto foo';

Nota bene: se non definisci $foo come globale, non sarà collegata allo scope delle variabili globali.

Ulteriori letture su questo argomento: http://www.php.net/manual/en/reserved.variables.globals.php

8 dic 2013 18:19:00
0

Se provi a stampare tutti i $GLOBALS e ottieni un errore 'memoria consentita superata' o qualcosa di simile, inserisci questo codice all'interno di 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 ago 2022 19:15:47