【问题标题】:How to integrate Wordpress into Kohana 3如何将 Wordpress 集成到 Kohana 3 中
【发布时间】:2011-02-19 02:42:02
【问题描述】:

我现在需要让 Kohana 3 网站拥有一个 Wordpress 博客。

我见过 Kerkness 的 Kohana For Wordpress,但它似乎与我想要的相反。

这是我想到的选项

  • 为模板设置样式,使其看起来与 Kohana 网站完全相同(耗时、非 DRY 且可能无法正常工作)
  • 将博客包含在 iframe 中(丑得要命)
  • 卷曲 Wordpress 页面。这当然意味着我需要在评论发布等之间创建层,这听起来工作量太大。

有什么方法可以在现有的 Kohana 应用程序中包含 Wordpress 博客?你有什么建议吗?

我找到了this post detailing the Kohana for Wordpress plugin,但我仍然对它的工作原理感到困惑。

这是否意味着在 Wordpress 中,我可以调用 Kohana 控制器?在我的情况下,这对我有用吗?

【问题讨论】:

标签: php wordpress kohana integration kohana-3


【解决方案1】:

我实际上已将 wordpress 用于代码点火器网站的 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

如果您收到此错误:

致命错误:只能使用变量 通过引用传递...

你必须这样做

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

因为某些版本的 php 中有 bug

然后在视图中

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

希望这会有所帮助


编辑

我在文件系统的 /blog 上安装了 wordpress。所以wordpress实际上是作为一个博客正常运行的。我就是用这个方法抓取页面

【讨论】:

  • 感谢盖伦,但是我已经处理了这部分(页面)。我想知道我是否也可以为博客内容做类似的事情。
  • 谢谢,当您的用户想要查看博客时,您是否将他们指向 /blog?显示博客后是否随时使用 CI?我想保持我的 Kohana 应用程序的相同标题和功能,所以我宁愿不指向 Wordpress 安装,而是让 Wordpress 的内容出现在我的一个视图中。
  • 在我的 wordpress 文件中,我实际上包含了来自 CI 的页眉/页脚文件。这需要一点吹嘘。
  • 我在我的 kohana 应用程序中使用 wordpress 论坛。我将 kohana 应用程序数据库和 wordpress 数据库保存在单独的实例中。我想在 wordpress 数据库中创建一个数据库条目,同时在 kohana 应用程序中添加一个新用户.以下答案是否可能。如果可能,你能给出一些想法。
【解决方案2】:

由于 WordPress 的工作方式,这将非常困难。具体来说,它在所有地方都使用全局变量,并且由于 Kohana 是作用域的,您将无法访问这些变量。

长话短说:你想要的几乎是不可能的。但是,如果你让它工作(没有破解 WP),我真的很想看看你是怎么做到的。

【讨论】:

  • 谢谢,我认为这可能很难。上次我尝试(通过我的个人博客)时,我用 Kohana 2.3 编写了整个前端。如果我真的让它工作,我会告诉你的。
  • 您能否检查一下这个 SO 问题 stackoverflow.com/questions/20934551/… 并指导我。
【解决方案3】:

我一直认为这会相对容易。也就是说,使用 WordPress 作为您网站的后端(至少对于博客部分)并使用 Kohana 来提供帖子和页面。如果我没记错的话,您需要做的就是设置模型(帖子、评论、页面)以从 WordPress 数据库(有或没有 ORM)而不是新数据库中收集数据。

【讨论】:

  • 这是最简单的方法(我为自己的博客做过)。但是您需要为任何功能创建包装器(例如发布 cmets)。
【解决方案4】:

请看这里:http://www.intuitivity.org/archives/8 我昨天想通了:)

【讨论】:

    【解决方案5】:

    哦,我很久以前就做过了(实际上是在去年年底)。

    假设

    1. 您正在使用带有 mod_rewrite 或类似选项的 Wordpress 永久链接。
    2. 您没有打开 register_globals()。将其关闭以确保 Kohana 不会删除 Wordpress 的全局变量。

    重命名

    首先,您需要在 Kohana 中重命名 __() 函数。比如说,你把它重命名为__t()。您需要在它出现的任何地方替换它,如果您使用像 Netbeans 这样可以找到函数或方法用法的编辑器,这非常容易。

    层次结构

    您需要做出的下一个决定是您是要在 Kohana 中加载 Wordpress 还是在 Wordpress 中加载 Kohana。我更喜欢后者,我将在下面记录。如果您愿意走那条路,我可以记录后者。

    我把 kohana 目录放在我的主题目录中。

    在你的主题的functions.php文件中,简单地

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

    Kohana 配置

    您的 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 是您选择的类。

    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 操作.

    所以你有它。任何未在 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 的帮助,请告诉我。

    【讨论】:

    • +1 这太棒了!非常感谢。我最终跳过了 Kohana 的项目并单独使用 WordPress,我确实学到了很多 WordPress 的工作原理(以及一些有问题的编码......)。如果我决定将来一起使用这些项目,我一定会看看这个。
    • 谢谢。祝你的项目好运。
    • 我在我的 kohana 应用程序中使用 wordpress 论坛。我将 kohana 应用程序数据库和 wordpress 数据库保存在单独的实例中。我想在 wordpress 数据库中创建一个数据库条目,同时在 kohana 应用程序中添加一个新用户.是否有可能与以下答案。如果可能的话,你能给出一些想法。
    【解决方案6】:

    另一个解决方案是让 Wordpress 和 Kohana 安装完全分开。然后,您创建一个自定义 Wordpress 主题,该主题将从 Kohana 中提取页眉和页脚(您可以为此创建一个 Kohana 控制器)。

    添加页眉和页脚后,即使博客仍然是完全独立的安装,博客看起来也已集成到您的网站中。优点是无需破解 Wordpress 或 Kohana 即可使其正常工作。

    在这篇博文中有更多关于这个方法的细节:Integrating Wordpress into a Kohana application

    【讨论】:

    • 正是我想要的。谢谢老兄!
    猜你喜欢
    • 2011-09-04
    • 2018-05-17
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多