如何在WP会话中存储和接收变量?

时间:2013-10-09 作者:Derfder

我有一个带有一些复选框和输入框选择框的表单,它通过ajax调用显示用户想要什么。问题是,当用户单击项目并显示详细信息页面,然后决定返回到上一页时,他需要单击并再次选择他以前的选择。

我想让WP在点击详细信息页面的按钮时将所有选项存储在会话中,并在会话中保存实际信息,然后当他再次访问页面时,将在会话中更改这些值,并在找到任何值时进行设置。

这可以在WP中完成吗?

如果是,如何进行?

让我们将其过于简单化,并说我们的形式中有类似的东西:

<input class="car_color" type="checkbox" name="car_color" value="1" />
<input class="car_color" type="checkbox" name="car_color" value="2" />
<input class="car_color" type="checkbox" name="car_color" value="8" />
<input class="car_color" type="checkbox" name="car_color" value="4" />
<input class="car_color" type="checkbox" name="car_color" value="6" />
我在表单中不使用提交按钮,它是在输入更改时通过AJAX处理的。

在我通过ajax获得的结果中,我有一个指向详细信息页面的链接:

<a class="detail-info-link" href="<?php echo $url ?>">
知道我如何在会话中存储我的值,并在浏览器中重新访问/重新加载/返回按钮时调用它们吗?

我需要能够读取会话存储的内容并通过使用它?Javascript?并通过已经运行良好的ajax触发我的搜索功能。

我只需要存储(可能在转到href of by detail按钮中的$link并读取和发送会话变量(如果存在)之前)。

6 个回复
SO网友:Nicolai Grossherr

默认情况下,wordpress中没有启用会话,如果您想激活php会话,请在functions.php:

if (!session_id()) {
    session_start();
}
您现在可以使用$_SESSION[\'your-var\'] = \'your-value\'; 设置会话变量。看一看PHP documentation on sessions.


更新:

还有第二个答案,在我看来,它也有价值——不幸的是,它被删除了,我正在这里添加信息。答案是指WP Session Manager 由@eamann编写的插件,作为替代解决方案
我读了一些关于该插件的文章,但从未使用过它,因为到目前为止,我坚持使用PHP会话,从来没有遇到过不能使用它们的问题。这是一个statement/comment 通过插件作者本人,我发现了一些可能的优势。

SO网友:Abdo-Host

在函数中添加此at。php

<?php

function tatwerat_startSession() {
    if(!session_id()) {
        session_start();
    }
}

add_action(\'init\', \'tatwerat_startSession\', 1);

SO网友:Philipp Zedler

也许Wordpress中没有常见的会话。。。无论如何,Wordpress知道用户的概念。您可以使用以下功能管理特定用户的相关信息add_user_meta, update_user_meta, get_user_meta, 和delete_user_meta.

如果您需要以这种方式在JavaScript中保存信息,可以编写一个小PHP脚本来满足您的需要,并使用Ajax调用它。

SO网友:embulldogs99

我将解释如何使用Native PHP Sessions for WordPress 插件。您可以将此逻辑应用于您的问题。

将此添加到您的函数中。php文件

if (!session_id()) {
    session_start();
}

  if ( isset( $_POST[\'wp-submit\'] ) ){

    $_SESSION[\'username\']=$_POST[\'log\'];

  }
$\\u POST[\'log\']正在引用wordpress登录表单中的用户名输入框。当用户登录时,用户名将存储到$\\u会话[\'username\')。在您的情况下,您可以将“log”更改为具有“car\\u color”的表单变量名。

稍后在其他php文件中引用用户名

$username=$_SESSION[\'username\'];

SO网友:nu everest

On the PHP page that receives the AJAX request, set $_SESSION like this.

$car_color = <user selected form input data>;
$_SESSION[\'car_color\'] = $car_color;

Access the $_SESSION variable

if(isset($_SESSION[\'car_color\'])) {
    $value = $_SESSION[\'car_color\'];
} else {
    $value = \'Please select a car color.\';
}
This tutorial 详细介绍会话的正确设置和处置。

SO网友:Ivijan Stefan Stipić

您必须首先在WordPress中启动会话,但不能像这样在WordPress中启动会话。

在启动会话之前,您需要检查是否有插件更早地启动了会话,因为您可能会遇到意外问题。所以你需要一个小小的算法。

if (version_compare(PHP_VERSION, \'7.0.0\', \'>=\')) {
    if(function_exists(\'session_status\') && session_status() == PHP_SESSION_NONE) {
        session_start(apply_filters( \'cf_geoplugin_php7_session_options\', array(
          \'cache_limiter\' => \'private_no_expire\',
          \'read_and_close\' => false
       )));
    }
}
else if (version_compare(PHP_VERSION, \'5.4.0\', \'>=\') && version_compare(PHP_VERSION, \'7.0.0\', \'<\'))
{
    if (function_exists(\'session_status\') && session_status() == PHP_SESSION_NONE) {
        session_cache_limiter(\'private_no_expire\');
        session_start();
    }
}
else
{
    if(session_id() == \'\') {
        if(version_compare(PHP_VERSION, \'4.0.0\', \'>=\')){
            session_cache_limiter(\'private_no_expire\');
        }
        session_start();
    }
}
我还在这里添加了对旧PHP版本的支持。

结束