php - 如何从 Artisan Command 访问 WordPress 功能

标签 php wordpress laravel laravel-5 laravel-artisan

我关注了这个tutorial关于将 WordPress 与 Laravel 结合使用,我能够从我的 Laravel Controller 访问 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;
    }

这行得通,而且我已经能够访问到目前为止我尝试过的所有 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;
    }

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

我唯一能想到的其他(hacky)事情是将 Controller 导入我的 artisan 命令,但我真的不想那样做。

更新

公认的答案是要走的路。你会遇到一些事情。您会收到一些与未在客户端中设置的 $_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";

最佳答案

我认为这部分

将 Laravel 连接到 Wordpress

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

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

另一个我认为更好的方法是将这个文件包含到 composer autoloader 中,但是你不能在那里定义常量。

关于php - 如何从 Artisan Command 访问 WordPress 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32529425/

相关文章:

php - Laravel 哪里不工作

php - MySQL 和 PHP - 选择/选项列表并向用户显示仍然允许我生成查询的数据

php - 需要从一列中总结表中所有行中的数字

php - Eloquent 访问器和属性命名

php - 模拟 Laravel 模型不起作用 - 无论如何都要使用数据库

php - 第一个 DropDownList 更改后如何从数据库加载第二个 DropDown 列表

sql - 为什么 "wc_get_product_id_by_sku()"函数在循环中返回相同的id?

javascript - 我可以使用 Javascript 更新 WordPress 编辑器中的默认类吗?

html - 在 anchor 标记内添加中断(使用 CMS)

mysql - Laravel 不能使用 Eloquent/Builder 类型的对象作为数组