¿Cómo usar mi propio valor de sesión personalizado en WordPress?
¿Cómo puedo usar mi propio valor de sesión (personalizado) en WordPress?
Por ejemplo: $_SESSION['myname']="4lvin"
Ya he insertado session_start()
en todas las páginas que necesito de la siguiente manera.
<?php
session_start();
$_SESSION['myname'] = "4lvin";
?>
Pero no funciona de manera global.
Solo funciona en la misma página.
NO se puede acceder globalmente desde otras páginas (usando la misma lógica).

EDITADO: "EL PLUGIN A CONTINUACIÓN YA NO ESTÁ DISPONIBLE, POR FAVOR UTILICE ESTE PLUGIN EN SU LUGAR: WordPress Session Plugin"
Existe un buen plugin para WordPress adaptado de la clase Session de CodeIgniter: WP Sessions Plugin.
Cuando activas el plugin, puedes comenzar a usar el objeto $session
desde cualquier parte de tu tema (el objeto $session
está disponible como global). Por ejemplo, para usar el objeto $session en el archivo header.php
, simplemente añade este código:
global $session;
Si eres desarrollador de plugins y deseas adaptar este plugin con el tuyo, también puedes encontrar la versión standalone en el paquete. La documentación del plugin proporciona más información para desarrolladores sobre cómo adaptarlo a tu proyecto.
Aquí hay algunas funciones útiles tanto para desarrolladores de temas como de plugins.
Puedes agregar datos de sesión de esta manera:
// Un valor
$session->set_userdata( 'username', 'john' );
// Pasando un array
$array = array(
'username' => 'john',
'email' => 'john@gmail.com'
);
$session->set_userdata( $array );
Para recuperar datos de sesión:
$session->userdata( 'username' );
Para obtener todos los datos de sesión:
$session->all_userdata(); // devuelve un array
Para eliminar un elemento de la sesión:
$session->unset_userdata( 'username' );
Para eliminar varios elementos de la sesión:
$array = array(
'username' => '',
'email' => ''
);
$session->unset_userdata( $array );
También puedes usar Flashdata, que son datos de sesión que solo estarán disponibles para la siguiente solicitud al servidor y luego se borrarán automáticamente. Estos pueden ser muy útiles cuando los usas para mensajes informativos o de estado (por ejemplo, "El producto ha sido eliminado").
// Agregar Flashdata
$session->set_flashdata( 'item', 'value' );
// Recuperar Flashdata
$session->flashdata( 'item' );
// Conservar Flashdata
// (si necesitas conservar los datos flash a través de una solicitud adicional,
// puedes usar esta función):
$session->keep_flashdata( 'item' );
Para destruir la sesión:
$session->sess_destroy();
El plugin también admite shortcodes. Puedes imprimir cualquier dato de sesión en tus publicaciones o páginas:
[session key="username"]
Para acceder a una segunda clave:
[session key="user_data" sec_key="display_name"]
Espero que esto le sea útil a alguien.

Sí, deberías usar este otro: http://wordpress.org/plugins/wp-session-manager/ (Este es mucho mejor y más estable).

Otro plugin https://wordpress.org/plugins/wp-native-php-sessions/

¿Por qué no podemos usar la funcionalidad de sesión predeterminada de PHP en WordPress? Esta solución crea dependencia en un plugin.

WordPress no utiliza sesiones, por eso tus variables de sesión no están funcionando.
De hecho, si ciertas variables están definidas, WordPress destruirá $_SESSION
para mantenerse sin estado (stateless).
Pero si realmente deseas usar sesiones, intenta agregar session_start()
al principio de tu archivo wp-config.php
. Esto (con suerte) iniciará sesiones cada vez que WordPress se inicie, por lo que podrás establecer y leer tus variables $_SESSION
en otras partes del sistema.

Vi que WordPress usa Cookies para almacenar algunos datos de inicio de sesión. Cuando imprimí el array $_COOKIE, pude ver algunos datos. Me gustaría establecer esos datos manualmente. Más información aquí: http://stackoverflow.com/questions/21595900/how-to-bypass-wordpress-login

También, ¿es recomendable modificar el archivo wp-config.php para iniciar sesión? Si actualizamos WordPress más tarde, ¿se actualizará también el archivo wp-config.php?

Tutorial que discute esto con más detalle http://silvermapleweb.com/using-the-php-session-in-wordpress/

@shasikanth no, el archivo wp-cofnig.php
no se modifica durante las actualizaciones.

Una solución sencilla sin usar plugins o sin modificar el archivo wp-config.php
es actualizar el archivo functions.php
de tu tema e insertar al principio lo siguiente:
<?php
//Archivo functions.php de WordPress
if(!session_id()) {
session_start();
}
Dado que el archivo functions.php
(también conocido como archivo de funciones del tema) es una plantilla incluida automáticamente en los temas de WordPress y actúa como un plugin para tu sitio WordPress. Además, si tienes más de 1 tema instalado en tu sitio web, modificar el functions.php
solo afectará al tema seleccionado, no a todos (donde puede que no quieras habilitar sesiones).
