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

Я теперь должен заставить сайт Kohana 3 иметь блог Wordpress.

Я видел Kohana Kerkness Для Wordpress, но это, кажется, противоположность того, что я хочу.

Вот опции, о которых я думал

  • Разработайте шаблон для точного сходства на сайт Kohana (трудоемкий, не DRY, и может не работать),
  • Включайте блог в iframe (ужасный как весь ад)
  • ЗАВИХРИТЕСЬ страницы Wordpress в. Это, конечно, означает, что я должен буду создать слои между регистрацией комментария, и т.д., который походит на слишком большую работу.

Есть ли какой-либо способ, которым я могу включать блог Wordpress в рамках существующего приложения Kohana? У Вас есть какие-либо предложения?

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

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

9
задан menjaraz 16 December 2011 в 06:27
поделиться

5 ответов

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

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

3
ответ дан 4 December 2019 в 12:17
поделиться

Я действительно использовал 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 на самом деле работает как обычный блог. Я просто использую этот метод для захвата страниц

4
ответ дан 4 December 2019 в 12:17
поделиться

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

0
ответ дан 4 December 2019 в 12:17
поделиться

См. Здесь: http://www.intuitivity.org/archives/8 Вчера разобрался :)

1
ответ дан 4 December 2019 в 12:17
поделиться

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

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

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

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

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

Иерархия

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

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

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

включите TEMPLATEPATH . '/кохана/index.php';

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

Файл 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.

8
ответ дан 4 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: