我必须在我的 CodeIgniter 系统中添加一个 WordPress 安装,所以我把它放在一个名为的子图中blog
,并在我的.htaccess
. 一切都很好。
我已将所有 WordPress 表与我的 CodeIgniter 数据库中的前缀放在一起_wp
。
我现在已经将 WordPress 博客头文件加载到index.php
CodeIgniter 中,如下所示;
require('blog/wp-blog-header.php');
add_filter('site_url', 'ci_site_url', 1);
function ci_site_url() {
include(FCPATH.'/application/config/config.php');
return $config['base_url'];
}
并在我的Account
控制器中创建了一个注册方法,以实际链接到我的Customers
. 我这样做是因为我想让 WordPress 登录/注册过时,并从 CodeIgniter 登录页面单独控制它;
protected function register_wp($email_address = FALSE) {
if ($email_address !== FALSE) {
if (username_exists( $email_address ) == NULL) {
$password = wp_generate_password(12, TRUE);
$user_id = wp_create_user($email_address, $password, $email_address);
wp_update_user(array(
'ID' => $user_id,
'nickname' => $email_address
));
$user = new WP_User($user_id);
$user->set_role('subscriber');
$login_data = array(
'user_id' => $user_id,
'password' => $password,
);
return $login_data;
}
else {
// User already exists with that email address
return FALSE;
}
}
else {
// No email_address given
return FALSE;
}
}
以及登录方式,给个思路;
protected function login_wp($user_id = FALSE) {
if ($user_id !== FALSE) {
$user_login = 'admin';
$user = get_userdatabylogin($user_login);
$user_id = $user->ID;
wp_set_current_user($user_id, $user_login);
wp_set_auth_cookie($user_id);
do_action('wp_login', $user_login);
}
else {
// No user_id given
return FALSE;
}
}
一切都还很顺利。但冲突来了;我很伤心,因为到目前为止一切都很好:
WordPress 超越了会话并终止了 CodeIgniter 的会话。
我已经尝试了很多东西;
session_rename('PHPSESSIDWP');
然后在加载 WordPress 后为 CodeIgniter 启动另一个会话(使用另一个名称)- COOKIE 路径(我不能 100% 确定我是否做对了,因为它根本没有改变。在线阅读一些内容它也不适用于所有浏览器)
- COOKIE域(好像没有效果)
问题是我无法加载require('blog/wp-blog-header.php');
唯一的控制器方法,因为我需要能够控制 WordPress 部分的登录状态。site_url()
除此之外,我还会收到有关URL 帮助程序已声明的功能的投诉。
我认为这个问题主要是因为 CodeIgniter 和 WordPress 都使用自己独特的方式来处理会话(数据库中的 CI 和“超级全局”中的 WordPress),这可能只会让他们使用 cookie 来记住“状态”。
我的整个 CodeIgniter 系统已经在数据库驱动的会话模型上运行,因此绝对不能进行切换。对于 WordPress,它的代码功能似乎甚至不能再与 session 一起使用(我知道 session “做”工作,但这似乎对 WP 核心系统没有任何影响)。
wp_unregister_GLOBALS();
我也在文件中引用了wp-settings.php
。
另外,我还尝试在 CodeIgniter 中重命名我的会话 COOKIE 名称以使用类似session_ci
我真的希望有人知道一种方法可以告诉 CodeIgniter 或 WordPress 只更新它们的值,而不是每次都杀死整个会话。我还阅读了一些关于拆分 cookie 的内容,.htaccess
但在上面找不到好的资源。因此,如果有人知道如何做到这一点,我将永远感激不尽。
我很绝望。完成了 98%,然后最后得到了这样的失望:(..
更新
也许我可以在处理 cookie 的 WordPress 部分做一些事情?
http://codex.wordpress.org/Function_Reference/wp_set_auth_cookie
可悲的是,我并不是 WordPress 世界的真正家。由于人们真正想在博客中使用购买的模板,我只需要使用它一次。
此页面还说明了以下内容;
WordPress 使用这两个 cookie 绕过 wp-login.php 的密码输入部分。如果 WordPress 识别出您有有效的、未过期的 cookie,您将直接进入 WordPress 管理界面。如果您没有 cookie,或者它们已过期,或以其他方式无效(例如您出于某种原因手动编辑它们),WordPress 将要求您再次登录,以获取新的 cookie。
我想知道如何绕过“无效”检查,这可能是它杀死 CodeIgniter cookie 的原因?奇怪的是session_ci
,尽管会话似乎仍然被杀死,但价值似乎仍然存在。