1

我的 wordpress 博客需要用户名和密码。在我放置的第一个 wp 页面上:

<?php 
  global $current_user;
  get_currentuserinfo();
  $name = $current_user->user_firstname . ' '.$current_user->user_lastname;
  $_SESSION['memberName'] = $name;
  echo '<h2>Welcome ' . $name . '</h2>';
?>

正如预期的那样,“欢迎”与用户名一起出现。我有一个自定义菜单,将用户转移到一个非 WP 页面,初始行:

<?php 
  session_start(); 
  $name = $_SESSION['memberName'];
?>

但是,在链接到这个非 wp 页面后, $name 是空白的。如何在会话中传输 !name?

4

4 回答 4

0

你为什么不使用WP Sessions Plugin。它为您创建会话,当用户更改他的个人资料数据时,此插件也会更新他的会话数据。同时,如果用户注销,则插件会从数据库中删除他的会话数据。

一些例子:

您可以像这样添加会话数据:

// One value
$session->set_userdata( 'username', 'john' );

// Passing array
$array = array(
    'username' => 'john',
    'email'    => 'john@gmail.com'
);

$session->set_userdata( $array );

检索会话数据:

$session->userdata( 'username' );

获取所有会话数据:

$session->all_userdata(); // returns array

要从会话中删除一项:

$session->unset_userdata( 'username' );

要从会话中删除更多项目:

$array = array(
    'username' => '',
    'email'    => ''
);
$session->unset_userdata( $array );

您还可以使用Flashdata,它是仅可用于下一个服务器请求的会话数据,然后会自动清除。当您将它们用于信息状态消息(例如“产品已被删除”)时,它们会非常有用。

// Add Flashdata
$session->set_flashdata( 'item', 'value' );

// Retrieve Flashdata
$session->flashdata( 'item' );

// Preserving flashdata 
// (if you need to preserve flashdata through an additional request, 
// you can use this function):
$session->keep_flashdata( 'item' );

销毁会话:

$session->sess_destroy();

该插件还支持简码。您可以在帖子或页面上打印任何会话数据:

[session key="username"]

我希望这有帮助。

于 2012-11-19T19:35:21.570 回答
0

让它成为一个加载 WP 的 WP 页面,如下所示:

require_once('PathToBlogRoot/wp-load.php');

我认为这将是实现这一目标的最简单方法。

于 2012-11-18T21:38:13.127 回答
0

如果它在同一个域上,您可以将其添加到 cookie 中,就像这样

<?php 
  global $current_user;
  get_currentuserinfo();
  $name = $current_user->user_firstname . ' '.$current_user->user_lastname;
  setcookie("guest_name", $name);

  echo '<h2>Welcome ' . $name . '</h2>';
?>

然后在 NON WP 页面上你有类似的东西

<?php echo $_COOKIE('guest_name'); ?>

如果要将它们重定向到另一个域,最好将用户名放在 GET 参数中。就像当您重定向到新页面时,您只需添加用户名

<?php


   $name = $current_user->user_firstname . ' '.$current_user->user_lastname;
   header( 'Location: http://your_non_wp_page/index.php?username='.$name ) ;

?>

然后在那个页面上你就做

<?php echo $_GET['username']; ?>

但是cookie会更持久。

于 2012-11-18T21:40:48.297 回答
0

虽然 Vladimir 获得了一些荣誉——因为他向我指出了 setcookie()——一个主要问题是需要将 setcookie 放在文件中的 html 行之前;在 WP 中并不容易。在 WordPress 中执行此操作的少数地方之一是在 functions.php 文件中;例如:

function set_user_cookie() {
  global $current_user;
  get_currentuserinfo();
  $name = $current_user->user_firstname . ' '.$current_user->user_lastname;
  setcookie('member_name', $name,time()+60*60*20,'/');   // 20 hours
}
add_action( 'init', 'set_user_cookie');

然后很容易在我的非 wp 页面中检索 cookie 信息

于 2012-11-19T23:44:24.407 回答