TomC是对的,但在此基础上,我要做的就是。我主要将其与全局对象一起使用,将其序列化到会话中以保存,并从要使用的会话中取消序列化。这里我刚刚使用了一个变量数组。这样,您就不必担心在运行过程中保存到会话中,并且会话的使用也可以轻松地扩展到其他数据中。
我的主要用途是购物篮和订单,所以proper sanitisation, validation and nonces are important, 但为了保持示例的干净性,将它们放在这里。看见https://developer.wordpress.org/plugins/security/nonces/ 和https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data
假设所有这些都进入主题,那么您的初始化代码与中的TomC类似functions.php
add_action( \'init\', \'setup_session\' );
function setup_session() {
session_start();
global $map_data;
if (isset($_SESSION[\'map_data\'])) {
$map_data = unserialize($_SESSION[\'map_data\']);
} else {
$map_data = array();
}
process_get();
/* chain it after session setup, but could also hook into
init with a lower priority so that $_GET always writes
over older session data, or put your own action here to
give multiple functions access to your sessions
*/
}
add_action( \'shutdown\', \'save_session\' );
function save_session() {
global $map_data;
if (isset($map_data)) {
$_SESSION[\'map_data\'] = serialize($map_data);
}
}
function process_get() {
// do modify this to:
// check nonce
// sanitise
// validate
` global $map_data;
if ( isset($_GET["pickup"]) || isset($_GET["pickupadd"]) || isset($_GET["dropoff"]) || isset($_GET["dropoffadd"]) || isset($_GET["km"])
) {
$map_data["pickup"] = $_GET["pickup"];
$map_data["pickupadd"] = $_GET["pickupadd"];
$map_data["dropoff"] = $_GET["dropoff"];
$map_data["dropoffadd"] = $_GET["dropoffadd"];
$map_data["km"] = $_GET["km"];
}
// if any of these $_GET vars is set, replace the whole array
}
您也可以这样认为,只要您在PHP发送头之前启动会话,这就可以进入模板文件。在HTML标记正常工作之前,在一个写得很好的主题中(并且假设您没有运行任何写得很差的插件)。在这方面,挂接到WP操作更加健壮,但是将$\\u GET处理放在模板中可以让您轻松地将其保持在一个页面上,而不是在所有页面上运行它。
您可以更进一步,尽管这可能比您的情况需要付出更多的努力,并使用自定义会话代码:https://pippinsplugins.com/storing-session-data-in-wordpress-without-_session/