如何从Artisan Command访问WordPress功能

jea*_*_re 6 php wordpress laravel laravel-5 artisan

我按照本教程使用WordPress和Laravel,我能够从Laravel控制器访问WordPress功能.

基本例子

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Corcel;
class WordPressController extends Controller
{
    public function getIndex ()
    {
        return redirect('/');
         $posts = get_posts([
             'posts_per_page' => 20,
             'order' => 'ASC',
             'orderby' => 'post_title',
             ]);

        return $posts;
    }
Run Code Online (Sandbox Code Playgroud)

这工作,我已经能够访问到目前为止我尝试过的所有WordPress方法.

问题

我遇到的问题是当我创建并注册一个新的artisan命令并尝试从那里访问那些相同的方法时.

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Http\Request;
use App\Http\Requests;

class WPTags extends Command
{
    protected $signature = 'wp:tags';
    protected $description = 'Output tags from WordPress';

    public function __construct()
    {
        parent::__construct();
    }
    public function handle()
    {
        $tags = get_tags([
          'number'=>20,
          'offset' => 10,
          'hide_empty' => true,
        ]);
        return $tags;
    }
Run Code Online (Sandbox Code Playgroud)

据我所知,Laravel 5通过index.php文件导入WordPress方法的方式存在问题.我想我需要做一些自动加载,但我迷路了.我已经尝试重复我的artisan命令文件构造函数中的index.php文件中采取的步骤.

我能想到的另一个(hacky)事情是将控制器导入我的工匠命令,但我真的不愿意这样做.

更新

接受的答案是要走的路.你会遇到一些事情.您将获得与$_SERVER未在客户端中设置的变量相关的一些错误.这是我用来抑制/处理这些错误的代码.

这不是完美的,但对于本地开发来说,这至少可以让你高效.

//assumes you're using localhost as your base url
$_SERVER['HTTP_HOST'] = "localhost";
$_SERVER['SERVER_PROTOCOL'] = "HTTP/1.1";

if (!isset($_SERVER['REQUEST_METHOD'])) {
  $_SERVER['REQUEST_METHOD'] = "GET";
}
if (!isset($_POST['action'])) {
  $_POST['action'] = "undefined";
}

define('WP_USE_THEMES', false);

require __DIR__."/../public/wordpress/wp-blog-header.php";
Run Code Online (Sandbox Code Playgroud)

Gum*_*eer 1

我认为这部分

将 Laravel 连接到 Wordpress

define('WP_USE_THEMES', false);
require __DIR__."/../public/wordpress/wp-blog-header.php";
Run Code Online (Sandbox Code Playgroud)

最好放在 中,app.php因为每次调用 laravel 时都会打开此文件:web、控制台等。这尚未经过测试,但我认为应该可行。

另一个我认为更好的方法是将此文件包含到作曲家自动加载器中,但在那里您无法定义常量。