哦,我很久以前就这样做了(实际上是去年年底)。
假设
- 您正在将 WordPress 永久链接与 mod_rewrite 或类似选项一起使用。
- 您没有打开 register_globals() 。将其关闭以确保 WordPress 的全局变量不会被 Kohana 删除。
Renaming
首先,您需要重命名__()
Kohana 中的函数。比如说,你将其重命名为__t()
。您需要在它出现的所有地方替换它,如果您使用像 Netbeans 这样可以找到函数或方法的用法的编辑器,那么这非常容易。
等级制度
您需要做出的下一个决定是是否要将 Wordpress 加载到 Kohana 中,或者将 Kohana 加载到 Wordpress 中。我更喜欢后者,我在下面记录了这一点。如果您愿意走那条路,我可以记录后者。
我将 kohana 目录放在我的主题目录中。
在主题的functions.php 文件中,只需
include TEMPLATEPATH . '/kohana/index.php';
Kohana配置
您的 Kohana 的 index.php 文件还需要一些工作。删除查找 install.php 的行,因为它们将加载ABSPATH . WPINC . 'install.php'
相反,并在您的 WordPress 管理员中显示错误消息。您还需要更改 error_reporting,因为 Wordpress 失败时 E_STRICT。
您很可能需要删除处理请求的引导程序(在 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');
where 应用是您选择的班级。
我的代码应用类(没有类定义)是:
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 可以对任何可能已移动的页面进行重定向,例如/关于/日历 to /日历只要你没有about控制器和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 永久链接末尾的 /,这样/%年%/%月%/%日%/%帖子名%/变成/%年%/%月%/%日%/%帖子名%, etc
如果您在集成 Wordpress 和 Kohana 方面需要更多帮助,请告诉我。