我计划将Laravel用于我的Wordpress插件的api。结构如下:
- main-directory
- Laravel-dir
- WordPress-dir
我为Laravel创建了一个Wordpress服务提供程序,如下所示:
use File;
use Illuminate\Support\ServiceProvider;
class WordpressServiceProvider extends ServiceProvider
{
protected $bootstrapFilePath = '../../wp/wp-load.php';
public function boot()
{
wp_enqueue_style('app', '/app/public/app.css');
}
public function register()
{
if(File::exists($this->bootstrapFilePath)) {
require_once $this->bootstrapFilePath;
} else throw new \RuntimeException('Wordpress Bootstrap File Not Found');
}
}
我还将其添加为provider =>
下的Laravel-dir/config/app.php
:
App\Providers\WordpressServiceProvider::class,
现在,当有人访问其中一个Laravel页面时,我需要检查WordPress管理员用户是否已登录。
跳至下方的“修改”:我已尝试is_admin()
检查管理员用户。调用该函数有效(不抱怨),所以我假设我的服务提供者工作,但是虽然我以wp-admin身份登录,is_admin()
函数总是返回false
。
修改: 我意识到is_admin
是检查该网页是否为管理页面。相反,我必须使用wp_get_current_user()
我尝试在我的Wordpress插件中使用wp_get_current_user()
,它会返回所有管理员的信息。但是,如果我在Laravel中使用它,它将返回空数组。
答案 0 :(得分:0)
我自己也遇到过类似的问题。问题是由我的系统结构引起的。
我在子域上运行了laravel,而wordpress在根域运行。在这种情况下,您无权访问子域中的根域cookie。为了解决这个问题,我将laravel安装移动到了我的webroot(安装了wordpress)的子目录中,并为nginx创建了一个重写规则,以便从www.yourdomain.com/laravel为我的laravel安装提供服务。
您需要修改/etc/nginx/sites-available/yourdomain.com
并添加nginx以从yourdomain.com/laravel提供laravel安装:
location ^~ /laravel {
alias /pat/to/laravel/public;
try_files $uri $uri/ @laravel;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
location @laravel {
rewrite /laravel/(.*)$ /laravel/index.php?/$1 last;
}
如果您使用的是apache,请查看Apache URL Rewriting Guide
答案 1 :(得分:-1)
is_admin()用于确定您是否在管理员页面上,而不是您是管理员用户。