9

ここで、Kohana 3 サイトに Wordpress ブログを作成する必要があります。

Kerkness のKohana For Wordpressを見たことがありますが、私が望むものとは逆のようです。

ここに私が考えたオプションがあります

  • Kohana サイトとまったく同じようにテンプレートのスタイルを設定します (時間がかかり、非 DRY であり、機能しない可能性があります)。
  • ブログをiframe(地獄のように醜い)内に含めます。
  • Wordpress のページを cURL します。これはもちろん、コメントの投稿などの間にレイヤーを作成する必要があることを意味します。

既存の Kohana アプリケーション内に Wordpress ブログを含める方法はありますか? 何か提案はありますか?

Kohana for Wordpress プラグインの詳細を説明しているこの投稿を見つけましたが、それがどのように機能するかについてはまだ混乱しています。

Wordpress 内から、Kohana コントローラーを呼び出すことができるということですか? これは私の状況で役に立ちますか?

4

6 に答える 6

8

ああ、私はずっと前にこれをしました(実際には昨年の終わりに向かって)。

仮定

  1. mod_rewriteまたは同様のオプションでWordpressパーマリンクを使用しています。
  2. register_globals()がオンになっていない。Wordpressのグローバル変数がKohanaによって削除されないようにするには、これをオフにします。

名前の変更

__()まず、コハナで関数の名前を変更する必要があります。たとえば、名前をに変更し__t()ます。表示されるすべての場所で置き換える必要があります。Netbeansのようなエディタを使用すると、関数やメソッドの使用法を見つけることができます。これは非常に簡単です。

階層

次に行う必要がある決定は、WordpressをKohana内にロードするか、KohanaをWordpress内にロードするかです。私は後者を好みます。これについては以下で説明します。あなたがそのルートに行きたいのであれば、私は後者を文書化することができます。

テーマディレクトリにkohanaディレクトリを置きました。

テーマのfunctions.phpファイルで、単純に

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

コハナ構成

Kohanaのindex.phpファイルにもいくつかの作業が必要です。install.phpを探す行を削除しますABSPATH . WPINC . 'install.php'。代わりに読み込まれ、WordPress管理者にエラーメッセージが表示されます。また、WordpressがE_STRICTに失敗した時点で、error_reportingを変更する必要があります。

リクエストを処理するブートストラップ(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');

ここで、アプリケーションは選択したクラスです。

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コントローラーとカレンダーアクションが定義されていない限り、たとえば/ about/calendarから/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のパーマリンクの最後から/を削除して、/%year%/%monthnum%/%day%/%postname%//%year%/%monthnum%/%day%になるようにする必要がある場合があります/%postname%など


WordpressとKohanaの統合についてさらにサポートが必要な場合はお知らせください。

于 2010-08-29T00:43:27.677 に答える
4

実際にコードイグナイターサイトのCMSにwordpressを使ったことがあります。これは、ブログ コンテンツではなく、ページ コンテンツをプルするために使用した方法ですが、ニーズに合わせて少し変更することもできます。

私のフロントコントローラーでは、ワードプレスのヘッダーファイルを追加しました

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

これにより、必要な 2 つの機能にアクセスできます。

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

このエラーが発生した場合:

致命的なエラー: 参照渡しできるのは変数のみです…</p>

このようにしなければなりません

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

特定のバージョンの php にバグがあるため

次に、ビューで

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

お役に立てれば


編集


ファイルシステムの /blog にワードプレスをインストールしました。つまりワードプレスは実際にはブログとして正常に動作します。このメソッドを使用してページを取得するだけです

于 2010-05-13T15:54:26.047 に答える
3

WordPress の仕組み上、これは非常に困難です。具体的には、あらゆる場所でグローバル変数を使用します。Kohana はスコープが設定されているため、これらの変数にアクセスすることはできません。

簡単に言えば、あなたが望むものはほとんど不可能です。ただし、(WP をハッキングせずに) 動作するようになった場合は、どのように動作したかを知りたいと思います。

于 2010-05-14T09:14:08.733 に答える
1

もう1つの解決策は、WordpressとKohanaの両方のインストールを完全に分離しておくことです。次に、コハナからヘッダーとフッターをプルするカスタムWordpressテーマを作成します(そのためのコハナコントローラーを作成できます)。

ヘッダーとフッターを挿入すると、ブログは完全に別個のインストールであるにもかかわらず、Webサイトに統合されているように見えます。利点は、WordpressまたはKohanaのどちらにもハッキングして機能させる必要がないことです。

このブログ投稿には、この方法の詳細がいくつかあります:WordpressをKohanaアプリケーションに統合する

于 2011-12-16T09:10:50.247 に答える
1

ここを参照してください: http://www.intuitivity.org/archives/8 私は昨日それを理解しました:)

于 2010-06-28T21:54:14.140 に答える
0

これは比較的簡単だといつも思っていました。つまり、WordPress をサイトのバックエンド (少なくともブログ部分) として使用し、Kohana を使用して投稿とページを提供することです。私が間違っていなければ、モデル (投稿、コメント、ページ) を設定して、新しいデータベースではなく、WordPress データベース (ORM の有無にかかわらず) からデータを収集するだけです。

于 2010-05-25T13:47:40.940 に答える