如何将$_SESSION[‘’]添加到我的WordPress页面?

时间:2020-09-01 作者:davidb3rn

我正在尝试获取现有的对象数组,然后对其进行json\\U编码,并将其添加到$\\U会话[“”],以便我可以在我网站的其他页面上请求它。有没有办法保存我的会话字符串(或数组)并将其显示在另一个页面上?

下面是我试图添加到会话中的数组的代码。(我不知道是否需要对其进行编码,但我认为这可能会提高性能?)

    $postArray = array(
        "CompanyID" => "5",
        "FirstName" => $_POST[\'first_name\'],
        "LastName" => $_POST[\'last_name\'],
        "Email" => $_POST[\'email\'],
        "Company" => $_POST[\'company\'],
        "Phone" => $_POST[\'phone\'],
        "Fax" => $_POST[\'fax\'],
        "AdressLine1" => $_POST[\'address\'],
        "AdressLine2" => "",
        "City" => $_POST[\'city\'],
        "DistrictID" => $_POST[\'state\'],
        "CountryID" => $_POST[\'country\'],
        "PostCode" => $_POST[\'postcode\'],
        "SpecialInstructions" => $_POST[\'special\'],
        "Items" =>
                    $item_array
        ,
        "Source" => "Web submission"
    );
    $json = json_encode($postArray);
然后,在这段代码之后,我尝试将一个操作初始化为wp以启动并添加到会话中

add_action(\'wp\', \'start_my_session\');
function start_my_session() {
    session_start();
    $_SESSION[\'order_details\'] = $GLOBALS[\'json\'];
}
之后,我尝试使用此代码在新页面上调用它

<?php
add_action(\'wp_footer\', \'show_session_var\');
function show_session_var() {
    if(isset($_SESSION[\'order_details\'])) echo $_SESSION[\'order_details\'];
}
?>
当我尝试检索数据时,我遇到以下错误:session\\u start():无法在标头已发送时启动会话,但我需要创建会话,因为wordpress不会自动创建会话?

有什么想法吗?我是Wordpress中php开发的新手。

2 个回复
最合适的回答,由SO网友:drcrow 整理而成

删除session\\u start()和函数的开头。php提出:

if (!session_id()) {
    session_start();
}
要从插件使用,请使用以下命令:

function register_session(){
    if( !session_id() )
        session_start();
}
add_action(\'init\',\'register_session\');

SO网友:DevelJoe

完全没有必要对上述答案进行所有这些操作,只需使用session_start() 在脚本的最顶端,它将检索现有会话,如果不存在会话,则启动一个新会话(检查here). 只要在使用$\\u会话内容的地方,在脚本的最顶端调用它即可。因此,使用session_start() 在脚本顶部,您可以将任何内容插入到$\\u会话超全局中,然后还可以调用session_start() 在脚本的最顶端,您可以使用它。始终有效,并且在使用页面模板和自定义主题时特别容易。此外,将会话启动添加到函数中。php文件将在您的任何页面上打开会话,而不仅仅是您想要打开的页面,因此您可能需要做更多的事情。你也可以打电话session_start() 在相应的插件页面/脚本等中。