Uso de $_SESSION en código PHP de WordPress
Veamos cómo podemos utilizar variables de sesión PHP propias $_SESSION en código PHP que añadimos en WordPress. Si lo hacéis directamente, os avanzo que no irá. Hay que hacer un paso importante antes.
Ya vimos en un artículo anterior, cómo añadir código PHP en nuestro wordpress. Ya seguimos los pasos y poníamos en una página creada en wordpress, un snippet que contenía nuestro código PHP.
Pues vamos a complicarlo. Imaginad que queréis trabajar con una variable de sesión propia. Para ello, en nuestro código PHP, que previamente habremos insertado con un snippet (plugin que os comento enlace de antes), declararemos las variables de sesión con $_SESSION y necesitaremos inicialmente llamar a session_start() de PHP:
PHP y las variables de sesión
Por un lado, sabemos que en PHP, antes de utilizar las llamadas a las variables de sesión, $_SESSION[«mivariable»], tendremos que llamar a la función session_start().
Si lo hacemos directamente en el snippet, no funcionará. Las llamadas propias de WordPress al cargar una página, elimina/reinicia la llamada a variables de sesión, por lo que inutilizará nuestra llamada a session_start() en nuestro código.
WordPress código incorrecto
Vamos a ver el código inicial (y que no funcionaría) que pondríamos en la página que se crea las variables:
<?php
session_start();
$_SESSION["nombre"]= "David";
$_SESSION["presupuesto"]= 100;
?>
Y ahora el código que pondríamos en el resto de página para utilizar esas variables globales que podemos utilizar en toda la web.
<?php
session_start();
echo "Tu nombre es". $_SESSION["nombre"];
echo "Presupuesto máximo". $_SESSION["presupuesto"];
?>
Como ya hemos dicho, si esto lo ponemos en snippets en nuestra web, no funciona porque session_start() no se ejecutaría correctamente.
Solución para que funcione
La solución, es mover la función session_start() para que se ejecute lo primero de todo. Para ello, deberíamos añadir en el functions.php de la plantilla el siguiente código:
function start_my_session()
{
if( !session_id() ) {
session_start();
}
}
add_action('init', 'start_my_session');
Si buscáis en vuestra plantilla, debería haber el fichero functions.php que es el que debéis modificar. Os puede ayudar el artículo que creamos para saber carpeta donde está la plantilla de WordPress. Ahora bien, os recomiendo crear una plantilla child para evitar modificaciones directamente de la plantilla original.
Vale, añadiendo este código, hacemos que la variable session_start(9 se ejectue al incio de la carga de las páginas, y evitamos que WordPress la ignore. Ahora si, que podemos crear las páginas y añadir los código que corresponden:
Código que crea las variables globales.
<?php
// Fiajos que ya no está aquí el session_start()
$_SESSION["nombre"]= "David";
$_SESSION["presupuesto"]= 100;
?>
Y aquí el código que utiliza las variables globales:
<?php
// Fiajos que ya no está aquí el session_start()
echo "Tu nombre es". $_SESSION["nombre"];
echo "Presupuesto máximo". $_SESSION["presupuesto"];
?>
Resumen
Pues nada, a modo resumen, no se puede utilizar el session_start() en nuestro código, sino que tenemos que añadirlo en el functions.php de nuestra plantilla en modo de action (add_action()).
Espero que estos pasos os ayuden a poder trabajar con variables de sesión PHP ($_SESSION) en código PHP de vuestro WordPress.
Más información
Hola! Muchas gracias por tu post,
La verdad es que no es exactamente lo que buscaba pero se parece mucho.
Te voy a explicar lo que necesitaría realmente a ver si de alguna manera me puedes echar una mano.
En una pagina de WordPress quiero poner un enlace que lleve a los usuarios registrados a un lugar dónde pueden dejar incidencias.
Tengo la siguiente url: http://localhost/pruebas/membres/xxxxxxxxx/messages/compose/?r=incidencies_informatiques
En esa url tengo que incluir el nombre del usuario de WordPress es decir cambiar las xxxxxxxxx por la variable de WordPress que tiene el nombre del usuario que ha iniciado sesión. Es una intranet así que no se puede acceder al sitio sin iniciar sesión por lo que la variable siempre existirá.
Se te ocurre algo?
Muchas gracias de antemano y un saludo.
Has hecho un buen trabajo. El plugin Insert PHP Code Snippet va a ser muy útil àra mí.