Array $GLOBALS in WordPress
Esiste un file in cui WordPress definisce $GLOBALS
?
Mi chiedo semplicemente per cosa WordPress lo utilizza e a quale scopo.
È tutto!

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

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

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.

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.

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.

$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

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