29

我是编写插件的新手..我有一个 testplugin.php 文件和一个 ajax.php 文件..

我在 testplugin.php 中的代码是

global $session;

print_r($abc); //$abc is array of my data ..

$session['arrayImg']=$abc; //saving data in session 

echo  $session['arrayImg']; //displayin "Array"

我的 ajax.php 包含以下代码

global $session;

$abc = $session['arrayImg'];

print_r ("abs== ".$abc); //displayin "abs== Array"

如果使用session_start();

我收到以下错误

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent 

我只想将数据数组从插件的一个文件发送到另一个文件......

4

2 回答 2

56

在您的插件或主题functions.php文件上添加以下内容

function wpse16119876_init_session() {
    if ( ! session_id() ) {
        session_start();
    }
}
// Start session on init hook.
add_action( 'init', 'wpse16119876_init_session' );

接下来,添加数据SESSION-

// If session has started, this data will be stored.
$_SESSION['arrayImg'] = $abc;

要获取有关 ajax 挂钩函数的数据 -

// handle the ajax request
function wpse16119876_handle_ajax_request() {
    if ( ! session_id() ) {
        session_start();
    }

    if ( array_key_exists( 'arrayImg', $_SESSION ) ) {
        $abc = $_SESSION['arrayImg'];
    } else {
        $abc = 'NOT IN SESSION DATA';
    }

    // Do something with $abc
}
于 2013-04-20T11:35:45.717 回答
1

就我而言,我也在插件激活中使用了该会话变量。所以做了一些非正统的事情。我没有在挂钩中定义 session_start,而是将其作为插件的第一行 :)。

为了解决插件问题,一旦 wordpress 扫描我的文件,它就会启动会话。

最后,我不会在用户注销时破坏会话。我只是取消设置我的变量。这是为了以防万一其他插件也在使用会话。如果我销毁会话,它可能会影响其他插件。

干杯。

于 2014-07-23T04:16:00.947 回答