哦,我很久以前就这样做了(实际上是在去年年底)。
假设
- 您正在使用带有 mod_rewrite 或类似选项的 Wordpress 永久链接。
- 您没有打开 register_globals() 。关闭它以确保 Wordpress 的全局变量不会被 Kohana 删除。
重命名
首先,您需要重命名__()
Kohana 中的函数。说,您将其重命名为__t()
. 您需要在它出现的任何地方替换它,如果您使用像 Netbeans 这样可以找到函数或方法用法的编辑器,这非常容易。
等级制度
您需要做出的下一个决定是您是要在 Kohana 中加载 Wordpress 还是在 Wordpress 中加载 Kohana。我更喜欢后者,我将在下面记录。如果您愿意走那条路,我可以记录后者。
我将 kohana 目录放在我的主题目录中。
在主题的functions.php文件中,只需
include TEMPLATEPATH . '/kohana/index.php';
Kohana 配置
您的 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是您选择的一类。
我的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;
}
只要您没有定义about控制器和日历操作,它就可以让 Wordpress 重定向任何可能已移动的页面,例如/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 的帮助,请告诉我。