Я теперь должен заставить сайт Kohana 3 иметь блог Wordpress.
Я видел Kohana Kerkness Для Wordpress, но это, кажется, противоположность того, что я хочу.
Вот опции, о которых я думал
iframe
(ужасный как весь ад)Есть ли какой-либо способ, которым я могу включать блог Wordpress в рамках существующего приложения Kohana? У Вас есть какие-либо предложения?
Я нашел это сообщение, детализирующее Kohana для плагина Wordpress, но я все еще смущен относительно того, как это работает.
Это означает из Wordpress, я могу назвать контроллер Kohana? Действительно ли это полезно для меня в моей ситуации?
Это будет чрезвычайно сложно из-за того, как работает WordPress. В частности, он повсюду использует глобальные переменные, и поскольку Kohana имеет ограниченную область видимости, вы не сможете получить доступ к этим переменным.
Короче говоря: то, чего вы хотите, почти невозможно. Однако, если у вас все заработает (без взлома WP), мне было бы очень интересно посмотреть, как вы это сделали.
Я действительно использовал wordpress для CMS сайта Code Igniter. Это метод, который я использовал для извлечения содержимого страницы, а не блога, но, возможно, вы можете немного изменить его, чтобы соответствовать вашим потребностям.
В моем фронт-контроллере я добавил заголовочный файл 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
Если вы получите эту ошибку:
Fatal error: Только переменные могут быть переданы по ссылке...
Вы должны сделать это так
$page_id = 4;
$page_data = get_page( $page_id );
из-за ошибки в некоторых версиях php
Затем в представлении
<?= wpautop($page_data->post_content) ?>
Надеюсь это поможет
Я установил wordpress в /blog в файловой системе. Так что wordpress на самом деле работает как обычный блог. Я просто использую этот метод для захвата страниц
I всегда думал, что это будет относительно легко. То есть использовать WordPress в качестве серверной части вашего сайта (по крайней мере, для части блога) и использовать Kohana для обслуживания сообщений и страниц. Если я не ошибаюсь, все, что вам нужно сделать, это настроить свои модели (публикация, комментарий, страница) для сбора их данных из базы данных WordPress (с ORM или без нее) вместо новой.
См. Здесь: http://www.intuitivity.org/archives/8 Вчера разобрался :)
О, я сделал это давным-давно (на самом деле в конце прошлого года).
Во-первых, вам нужно переименовать функцию __()
в Kohana. Скажем, вы переименовываете его в __t()
. Вам нужно будет заменить его везде, где он появляется, что, если вы используете редактор, такой как Netbeans, который может найти использование функции или метода, довольно легко.
Следующее решение, которое вам нужно принять, — хотите ли вы загружать Wordpress внутри Kohana или Kohana внутри Wordpress. Я предпочитаю последний, который я документирую ниже.Я мог бы задокументировать последнее, если вы предпочитаете идти по этому пути.
Я поместил каталог kohana в каталог моей темы.
В файле functions.php вашей темы просто
включите TEMPLATEPATH . '/кохана/index.php';
Файл index.php вашего Kohana также нуждается в некоторой доработке. Удалите строки, которые ищут install.php, так как они будут загружать ABSPATH. ВПИНК . 'install.php'
вместо этого и отобразите сообщение об ошибке в панели администратора WordPress. Вам также необходимо изменить error_reporting, так как в данный момент Wordpress терпит неудачу E_STRICT.
Скорее всего, вам потребуется удалить последние несколько строк вашего бутстрапа (в Kohana), которые обрабатывают запрос, и изменить инициализацию:
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/calendar до /calendar, если у вас не определен контроллер about и действие calendar.
Вот и все. Любые URL-адреса, не определенные в Wordpress, попадут в определенный вами контроллер (или используйте шаблон 404 вашей темы).
Это не обязательно, но вы можете поместить заголовок вашей темы.php в папке 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, чтобы /%year%/%monthnum%/%day%/%postname%/ стало /%year%/%monthnum% /%day%/%postname% и т. д.
Пожалуйста, дайте мне знать, если вам нужна дополнительная помощь по интеграции Wordpress и Kohana.