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-如果您未登录,请重定向

Wordpress阻止访问wp admin€“wpsnipp.com网站你博客的Wordpress代码片段

WordPress 注销 404

条件字PRSS登录/注销

php GA跟踪代码 - 如果选项为is_user_logged_in - is_customize_preview

wordpress登录账号之后才能查看页面,实例