О, я сделал это давным-давно (на самом деле к концу прошлого года).
Предположения
- Вы используете постоянные ссылки Wordpress с mod_rewrite или аналогичной опцией.
- Вы не включили register_globals (). Отключите его, чтобы глобальные переменные Wordpress не удалялись Kohana.
переименование
Во-первых, вам нужно переименовать функцию __()
в Kohana. Скажем, вы переименовали его в __t()
. Вам нужно будет заменить его везде, где он появляется, что, если вы используете редактор, такой как Netbeans, который может найти использование функции или метода, довольно прост.
Иерархия
Следующее решение, которое вам нужно принять, это то, хотите ли вы загружать Wordpress внутри Kohana или Kohana внутри Wordpress. Я предпочитаю последнее, которое я документирую ниже. Я мог бы документировать последнее, если вы предпочитаете идти по этому пути.
Я поместил каталог kohana в каталог моей темы.
В вашем файле functions.php вашей темы просто
include TEMPLATEPATH . '/kohana/index.php';
Конфигурация Kohana
Файл index.php вашего Kohana также нуждается в некоторой работе. Удалите строки, которые ищут файл 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');
где Приложение - класс по вашему выбору.
Мой код для Приложения класса (без определения класса):
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 / calendar до / calendar , если у вас нет контроллера about и действия calendar .
Так что у вас это есть. Все URL, не определенные в Wordpress, попадут на ваш определенный контроллер (или используйте шаблон 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.