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.

Tutoriales WordPress

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