WP is_user_logged_in() 在集成站点中不起作用
Posted
技术标签:
【中文标题】WP is_user_logged_in() 在集成站点中不起作用【英文标题】:WP is_user_logged_in() doesn't work in integrated site 【发布时间】:2016-05-05 03:01:42 【问题描述】:我正在尝试将 WP 功能集成到外部 php 文件中。
问题是is_user_logged_in()
、is_admin()
等用户和登录的身份验证功能根本不起作用。但是,Post 的功能工作正常。
所以,一定是“Session”问题。
实际上,经过深度搜索,网络上唯一关于该问题的“好”帖子是 WP 支持中的以下旧帖子:https://wordpress.org/support/topic/how-to-integrate-sessionlogin-authentication-to-non-wordpress-pages-w-wp-auth
但是,那个解决方案根本不起作用,如果我启用 root Cookie
插件,我什至无法登录到我的 /wp-blog/
那么,有没有办法在php文件中集成登录功能呢?
代码很简单:
file.php
<?php
//define('WP_USE_THEMES', false);
//include($_SERVER['DOCUMENT_ROOT'].'/wp-blog/wp-load.php');
include($_SERVER['DOCUMENT_ROOT'].'/wp-blog/wp-blog-header.php');
if ( is_user_logged_in() )
echo 'logged in.';
else
echo 'NOT logged in.';
?>
另外,我的错误日志中有以下警告
PHP 警告:session_start():无法发送会话缓存限制器 - 标头已发送(输出开始于 /..../) /....../wp-content/plugins/global-content-blocks/global-content-blocks.php 在第 302 行
编辑:
我像 rnevius 在 cmets 中所说的那样添加了function.php
代码:
include($_SERVER['DOCUMENT_ROOT'].'/wp-blog/wp-blog-header.php');
include($_SERVER['DOCUMENT_ROOT'].'/wp-blog/wp-includes/functions.php');
我有
以下致命警告和致命错误:
PHP 警告:session_start():无法发送会话缓存限制器 - 标头已发送(输出开始于 /..../) /....../wp-content/plugins/global-content-blocks/global-content-blocks.php 在第 302 行
PHP 致命错误:无法重新声明 mysql2date()(之前已声明 在 /...../wp-includes/functions.php:26) 中 /....../wp-includes/functions.php 在第 42 行
编辑:
另外,我已经尝试过以下所有方法:
define('WP_USE_THEMES', false);
//include($_SERVER['DOCUMENT_ROOT'].'/wp-blog/wp-load.php');
include($_SERVER['DOCUMENT_ROOT'].'/wp-blog/wp-blog-header.php');
和
define('WP_USE_THEMES', false);
include($_SERVER['DOCUMENT_ROOT'].'/wp-blog/wp-load.php');
//include($_SERVER['DOCUMENT_ROOT'].'/wp-blog/wp-blog-header.php');
编辑:
这可能有助于思考:
我们有以下结构:
domain.com/test/
domain.com/wp-blog/
domain.com/wp-blog/test/
如果文件file.php
如果在/test/
中,它不起作用。
domain.com/test/file.php
domain.com/wp-blog/
domain.com/wp-blog/test/
如果文件file.php
在/wp-blog/
中,它有效!!
domain.com/test/
domain.com/wp-blog/file.php
domain.com/wp-blog/test/
如果文件file.php
在/wp-blog/test/
中,它有效!!
domain.com/test/
domain.com/wp-blog/
domain.com/wp-blog/test/file.php
“域”上的每个文件夹都有 755 和文件 644 权限。所以这不是“权限”问题。还有其他想法吗?
【问题讨论】:
你还没有加载 WordPress 的那部分......所以它不会工作。您应该(相反)创建一个自定义插件,或者将该文件包含在 functions.php 中。此外,FWIW,WordPress 不使用会话。 给我秒来包含functions.php @rnevius 包含 functions.php 时出现致命错误。我将错误发布在当前帖子上。 @rnevius 从错误中可以看出,由于 wp-blog-header.php,functions.php 已经被“包含”。随便…… 我认为@rnevius 的意思是您可能采取了错误的方法。您正在做的事情是在非 WordPress 页面中加载 WordPress,这是一种非常糟糕的做法。几乎可以肯定你可以用更好的方式做到这一点,比如使用自定义插件或 functions.php 文件中的一些代码。 【参考方案1】:您缺少阻止它加载所有输出的变量:
//Load startup
define('WP_USE_THEMES', false);
require_once( $_SERVER[ "DOCUMENT_ROOT" ] . "/wp-blog-header.php" );
【讨论】:
我之前也试过。我在帖子中添加了该信息 @Greg 你能打印出$_SERVER ["DOCUMENT_ROOT]
@Greg 和 wp-blog 文件夹的权限是什么?
文件夹 755 和文件 644 @Don Rhymmy
@Greg 考虑到它在文件夹中而不是外部文件夹中工作,这是一个路径问题。可能来自权限,但也可能来自其他原因以上是关于WP is_user_logged_in() 在集成站点中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress阻止访问wp admin€“wpsnipp.com网站你博客的Wordpress代码片段