ああ、私はずっと前にこれをしました(実際には昨年の終わりに向かって)。
仮定
- mod_rewriteまたは同様のオプションでWordpressパーマリンクを使用しています。
- register_globals()がオンになっていない。Wordpressのグローバル変数がKohanaによって削除されないようにするには、これをオフにします。
名前の変更
__()
まず、コハナで関数の名前を変更する必要があります。たとえば、名前をに変更し__t()
ます。表示されるすべての場所で置き換える必要があります。Netbeansのようなエディタを使用すると、関数やメソッドの使用法を見つけることができます。これは非常に簡単です。
階層
次に行う必要がある決定は、WordpressをKohana内にロードするか、KohanaをWordpress内にロードするかです。私は後者を好みます。これについては以下で説明します。あなたがそのルートに行きたいのであれば、私は後者を文書化することができます。
テーマディレクトリにkohanaディレクトリを置きました。
テーマのfunctions.phpファイルで、単純に
include TEMPLATEPATH . '/kohana/index.php';
コハナ構成
Kohanaのindex.phpファイルにもいくつかの作業が必要です。install.phpを探す行を削除しますABSPATH . WPINC . 'install.php'
。代わりに読み込まれ、WordPress管理者にエラーメッセージが表示されます。また、WordpressがE_STRICTに失敗した時点で、error_reportingを変更する必要があります。
リクエストを処理するブートストラップ(Kohana内)の最後の数行を削除し、initを変更する必要がある可能性が非常に高くなります。
Kohana::init(array(
'base_url' => get_bloginfo('home') . '/',
'index_file' => '',
));
Wordpressのfunctions.phpファイルまたはブートストラップに次の行を追加します。
remove_filter('template_redirect', 'redirect_canonical');
add_filter('template_redirect', 'Application::redirect_canonical');
ここで、アプリケーションは選択したクラスです。
Applicationクラス(クラス定義なし)の私のコードは次のとおりです。
public static function redirect_canonical($requested_url=null, $do_redirect=true)
{
if (is_404() && self::test_url())
{
echo Request::instance()->execute()->send_headers()->response;
exit;
}
redirect_canonical($requested_url, $do_redirect);
}
public static function test_url($url = NULL)
{
if ($url === NULL)
{
$url = str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']);
$url = trim($url, '/');
}
foreach (Route::all() as $route)
{
/* @var $route Route */
if ($params = $route->matches($url))
{
$controller = 'controller_';
if (isset($params['directory']))
{
// Controllers are in a sub-directory
$controller .= strtolower(str_replace('/', '_', $params['directory'])).'_';
}
// Store the controller
$controller .= $params['controller'];
$action = Route::$default_action;
if (isset($params['action']))
{
$action = $params['action'];
}
if (!class_exists($controller))
return false;
if (!(method_exists($controller, 'action_' . $action) || method_exists($controller, '__call')))
return false;
return true;
}
}
return false;
}
これにより、Wordpressは、 aboutコントローラーとカレンダーアクションが定義されていない限り、たとえば/ about/calendarから/calendarに移動した可能性のあるすべてのページにリダイレクトされます。
だからあなたはそれを持っています。Wordpress内で定義されていないURLは、定義されたコントローラーに分類されます(または、テーマの404テンプレートを使用します)。
追加
これは必須ではありませんが、テーマのheader.phpをkohanaビューフォルダー(アプリケーションまたはモジュール)の下、および任意のテーマファイルから配置できます。
echo View::factory('header')
フッター(またはその他のファイル)でも同じことができます。header.phpでは、次のこともできます。
if (isset($title)) echo $title; else wp_title(YOUR_OPTIONS);
そうすれば、コントローラーでできます
echo View::factory('header')->set('title', 'YOUR_TITLE');
URLの一貫性を保つために、Wordpressのパーマリンクの最後から/を削除して、/%year%/%monthnum%/%day%/%postname%/が/%year%/%monthnum%/%day%になるようにする必要がある場合があります/%postname%など
WordpressとKohanaの統合についてさらにサポートが必要な場合はお知らせください。