Laravel5とWordPressの合体または共存

いわゆるブログ的な機能とか単に何らかの新規のメッセージを掲示するというような機能はWordpressはすぐれているので、LaravelでCMSなんか面倒くさくて作りたくないという場合にLaravel5とWordpressの合体または共存できるかというのが本件の課題です。(誰かおしえてください)

単純なrewrite

Laravelはpublic以下のDocumentRootに適当なファイルがあるとちゃんと普通に読み込んでくれます。なのでpublic/wordpressでインストールすると単純にWordpressは動くわけですが、LaravelとWordpressで共通のセッション維持ができません。なので、システム的な合体はこれだとできないってことになってます。

WordPressにLaravelのオートローダーやブートストラップを取り込んでみる

WordPressのテーマ中にあるfunctions.phpにLaravelをまるごと読み込んでみました。

<?php
/* Laravel5のclassをひっぱってきたが使えるかもしれないし、使えないかもしれない */
define('VENDOR_PATH','/LARAVEL5_PROJECT_VENDOR_DIRECTORY');

define('LARAVEL_START', microtime(true));
require LARAVEL5_PROJECT_VENDOR_DIRECTORY.'/vendor/autoload.php';
$app = require_once LARAVEL5_PROJECT_VENDOR_DIRECTORY.'/bootstrap/app.php';

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

$response->send();

$kernel->terminate($request, $response);

これやっちゃうとWordpressがLaravel5になってしまいました。Laravel5のルーティング部分も取り込まれちゃうので、リクエストとレスポンスがそのままWordpressを飲み込んでしまっているかたちになっている感じ。

Laravel5のルーティングでWordpressを取り込む

今度はLarabvel5のルーティングでWordpressのオブジェクトを逆に取り込んでみます。
Sharing login between Laravel & WordPress
routes/web.php

Route::get('/wordpress', function(){
require('..\wordpress\wp-load.php');
return loginUser(Auth::user()->username);
});

functions.php

function loginFunction($username){
     $user_id = username_exists($username);
     $userdata = get_userdata($user_id);
     $user = set_current_user($user_id,$username);
     wp_set_auth_cookie($user_id);
    do_action('wp_login',$userdata->ID);
    // you can redirect the authenticated user to the "logged-in-page", define('MY_PROFILE_PAGE',1); f.e. first
    header("Location:".get_page_link(MY_PROFILE_PAGE));
}

vendor以下のいくつかのクラスがWordpressとLaravelで重複しているようでこれでもうまくいかないですね。
vendor/laravel/framework/src/Illuminate/Foundation/helpers.phpがだめみたいです。wp-load.phpを読み込んでも結果は同じでした。

Last update: 2018.01.08 (月)