Array $GLOBALS en WordPress

29 jul 2011, 00:34:42
Vistas: 14K
Votos: 11

¿Existe algún archivo donde WordPress define $GLOBALS?

Solo tengo curiosidad por saber para qué lo usa WordPress y con qué propósito.

¡Eso es todo!

2
Comentarios

También tenía curiosidad y encontré el manual. ¿Es esta una lista completa de $GLOBALS? https://developer.wordpress.org/apis/handbook/global-variables/

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

@OliviaChen Ese fue el primer lugar donde terminé, pero parece que faltan variables globales cruciales.

Márton Tamás Márton Tamás
22 dic 2020 19:56:21
Todas las respuestas a la pregunta 4
3
17

No estoy seguro si todas estas son variables globales de WordPress, pero hice una búsqueda rápida tipo grep en los archivos de WordPress e intenté extraer todas las variables globales que pude encontrar.

Esta es la lista que compilé. Puede que no sea perfecta, pero *con suerte* debería representar muchas de las claves de $GLOBALS que WordPress utiliza. No incluirá variables globalizadas que no estén explícitamente definidas como $GLOBAL, pero que aún tienen alcance 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']

Si quisieras tener una mejor idea de todo lo que hay dentro del array global podrías ejecutar algo como lo siguiente para obtener una impresión, porque el enfoque anterior obviamente tenía fallas ya que las variables globales se definen de más de una forma.

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

Eso debería darte una lista más completa de variables en el alcance global.

Espero que sea útil. :)

29 jul 2011 15:33:53
Comentarios

++++++ 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.. Probablemente hay cientos más. Code is Poetry :)

onetrickpony onetrickpony
29 jul 2011 18:47:58

Claro, hay muchos más que terminan en el ámbito global, pero no están definidos de la misma manera, por lo que es imposible incluirlos en mi patrón de regex.

t31os t31os
29 jul 2011 19:05:40

He añadido una función a mi respuesta que proporcionará una lista más completa de globales... :)

t31os t31os
29 jul 2011 19:13:19
3

Desafortunadamente, no.

Las definiciones de variables globales están dispersas por todo el código base.

Tampoco hay documentación para la mayoría de ellas.

29 jul 2011 00:41:37
Comentarios

Creo que también se debe mencionar que si declaras CUALQUIER variable en el ámbito global, automáticamente se agrega al array $GLOBALS sin necesidad de escribir $GLOBALS[, por lo que una búsqueda con grep posiblemente no devolvería todas las variables globales en WordPress.

stevendesu stevendesu
29 jul 2011 16:59:10

@steven_desu: Creo que querías publicar eso en la respuesta de t31os.

scribu scribu
29 jul 2011 17:30:57

Técnicamente no era grep, sino una coincidencia de patrón regex en todos los archivos del directorio de instalación de WordPress usando Notepad++. Mi búsqueda fue algo como $GLOBALS([^, ]+)([, ]+) ... lo que me dio un montón de resultados, que luego copié y pegué, y eliminé todos los datos irrelevantes.

t31os t31os
29 jul 2011 18:47:45
0

$GLOBALS es un array asociativo que contiene referencias a todas las variables definidas actualmente en el ámbito global. Esta es una herramienta del lenguaje PHP.

Las variables globales pueden definirse simplemente creando un nuevo elemento en el array $GLOBALS de esta manera:

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

Los Globales de WordPress se utilizan para compartir datos entre archivos. No están definidos en un lugar específico, pero puedes encontrar algunos de los más importantes aquí: http://codex.wordpress.org/Global_Variables

PHP facilita aún más el uso de $GLOBALS permitiéndote acceder a los elementos simplemente declarándolos con la palabra clave global.

global $foo;
$foo = 'nuevo contenido foo';

es lo mismo que:

$GLOBALS['foo'] = 'nuevo contenido foo';

Ten en cuenta que si no defines $foo como global, no estará vinculado al ámbito de variables globales.

Algunas lecturas adicionales sobre esto: http://www.php.net/manual/en/reserved.variables.globals.php

8 dic 2013 18:19:00
0

Si intentas imprimir todos los $GLOBALS y recibes un error como 'memoria permitida excedida' o algo similar, entonces coloca este código dentro de 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