Как интегрировать WordPress в Kohana 3

Теперь мне нужно сделать сайт Kohana 3 блогами WordPress.

Я видел Керкнесса « Кохана для WordPress» , но, похоже, это противоположность тому, что я хочу.

Вот варианты, о которых я думал

  • Создайте шаблон, который будет выглядеть точно так же, как сайт Kohana (отнимает много времени, не сушит и может не работать)
  • Включите блог в iframe (уродливый, как и все ад)
  • cURL на страницах WordPress. Это, конечно, означает, что мне нужно будет создавать слои между комментариями и т. д., что звучит как слишком много работы.

Есть ли способ включить блог WordPress в существующее приложение Kohana? Есть ли у вас какие-либо предложения?

Я нашел этот пост с подробным описанием плагина Kohana для WordPress , но я все еще смущен тем, как он работает.

Означает ли это изнутри WordPress, я могу назвать контроллер Kohana? Это полезно для меня в моей ситуации?

Related of "Как интегрировать WordPress в Kohana 3"

О, я сделал это давным-давно (на самом деле в конце прошлого года).

Предположения

  1. Вы используете постоянные ссылки WordPress с mod_rewrite или аналогичный вариант.
  2. У вас нет register_globals (). Отключите его, чтобы гарантировать, что глобальные переменные WordPress не будут удалены Коханой.

Переименование

Во-первых, вам нужно переименовать функцию __() в Кохане. Скажем, вы переименуете его в __t() . Вам нужно будет заменить его везде, где он появляется, что, если вы используете редактор, такой как Netbeans, который может найти использование функции или метода, довольно просто.

иерархия

Следующее решение, которое вам нужно сделать, – загрузить ли вы WordPress внутри Kohana или Kohana внутри WordPress. Я предпочитаю последний, который я документирую ниже. Я мог бы документировать последний, если вы предпочтете пойти по этому маршруту.

Я поместил каталог kohana в свой каталог тем.

В вашем файле functions.php вашей темы просто

include TEMPLATEPATH . '/kohana/index.php';

Конфигурация Kohana

Ваш файл index.php Kohana также нуждается в некоторой работе. Удалите строки, которые ищут install.php, поскольку они будут загружать ABSPATH . WPINC . 'install.php' ABSPATH . WPINC . 'install.php' ABSPATH . WPINC . 'install.php' и отобразите сообщение об ошибке в вашем текстовом редакторе wordpress. Вам также необходимо изменить error_reporting, поскольку на данный момент WordPress не работает E_STRICT.

Вам, скорее всего, потребуется удалить последние несколько строк вашего загрузочного файла (в Кохане), которые обрабатывают запрос, и изменить ваш 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; } 

который позволяет WordPress делать перенаправление для любой страницы, которая могла перемещаться, например / о / календаре в / календарь, если у вас нет определенного контроллера и определенных действий календаря .

Итак, у вас это есть. Любые URL-адреса, не определенные в WordPress, попадут в ваш определенный контроллер (или используйте шаблон 404 вашей темы).

дополнительный

Это не требуется, но вы можете поместить заголовок вашей темы в свою папку kohana views (приложение или в модуле) и из любого из ваших файлов тем

 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, чтобы /% год% /% monthnum% /% день% /% postname% / становится /% year% /% monthnum% /% day% /% postname% и т. д.


Пожалуйста, дайте мне знать, если вам нужна дополнительная помощь в интеграции WordPress и Kohana.

Я на самом деле использовал wordpress для CMS сайта воспламенителя кода. Это метод, который я использовал для вывода содержимого страницы, а не содержимого блога, но, возможно, вы можете немного изменить его, чтобы он соответствовал вашим потребностям.

В моем контроллере я добавил файл заголовка wordpress

 require('/path/to/wp-blog-header.php'); 

Это дает вам доступ к двум функциям, которые вам понадобятся

 get_page() – Get the page data from the database wpautop() – Automatically add paragraph tags to page content 

Чтобы получить данные страницы

 $page_data = get_page( 4 ); // Where 4 is the page ID in wordpress 

Если вы получите эту ошибку:

Неустранимая ошибка: только переменные могут передаваться по ссылке …

Вы должны сделать это так

 $page_id = 4; $page_data = get_page( $page_id ); 

из-за ошибки в некоторых версиях php

Тогда в представлении

 <?= wpautop($page_data->post_content) ?> 

Надеюсь это поможет


РЕДАКТИРОВАТЬ


Я установил wordpress в / blog в файловой системе. Так что WordPress фактически работает как блог обычно. Я просто использую этот метод для захвата страниц

Это будет очень сложно, потому что WordPress работает. В частности, он использует глобальные переменные повсюду, и поскольку Kohana находится в зоне действия, вы не сможете получить доступ к этим переменным.

Короче говоря: то, что вы хотите, почти невозможно. Однако, если вы его заработаете (без взлома WP), мне было бы очень интересно посмотреть, как вы это сделали.

Смотрите здесь: http://www.intuitivity.org/archives/8 Я понял это вчера:

Еще одно решение – полностью изолировать установки WordPress и Kohana. Затем вы создадите пользовательскую тему WordPress, которая вытащит верхний и нижний колонтитулы из Kohana (для этого вы можете создать контроллер Kohana).

Когда у вас есть заголовок и нижний колонтитул, блог выглядит интегрированным на ваш сайт, хотя он по-прежнему является полностью отдельной установкой. Преимущество заключается в том, что нечего взламывать ни WordPress, ни Kohana, чтобы заставить его работать.

В этом блоге есть несколько подробностей об этом методе: Интеграция WordPress в приложение Kohana

Я всегда думал, что это будет относительно легко. То есть использовать WordPress в качестве исходного кода вашего сайта (по крайней мере для части блога) и использовать Kohana для обслуживания сообщений и страниц. Если я не ошибаюсь, все, что вам нужно сделать, это настроить ваши модели (пост, комментарий, страницу), чтобы собирать свои данные из базы данных WordPress (с ORM или без нее) вместо новой.