将Wordpress功能集成到Laravel中作为服务提供者

时间:2016-08-23 20:41:11

标签: php wordpress laravel service-provider

我计划将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中使用它,它将返回空数组。

2 个答案:

答案 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()用于确定您是否在管理员页面上,而不是您是管理员用户。

https://codex.wordpress.org/Function_Reference/is_admin