如何将 Wordpress 集成到 Kohana 3 中

Posted

技术标签:

【中文标题】如何将 Wordpress 集成到 Kohana 3 中【英文标题】:How to integrate Wordpress into 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 控制器?在我的情况下,这对我有用吗?

【问题讨论】:

嗨,alex,您能否检查一下这个与在 wordpress 中访问 kohana 应用程序数据有关的 SO 问题 ***.com/questions/20934551/…。谢谢 【参考方案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 问题 ***.com/questions/20934551/… 并指导我。【参考方案3】:

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

【讨论】:

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

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

【讨论】:

【参考方案5】:

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

假设

    您正在使用带有 mod_rewrite 或类似选项的 Wordpress 永久链接。 您没有打开 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

【讨论】:

正是我想要的。谢谢老兄!

以上是关于如何将 Wordpress 集成到 Kohana 3 中的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Facebook 集成到 WordPress 注册/登录中?

如何将我的 wordpress 博客集成到我的子域中?

如何将新浪微博登录集成到wordpress中? [关闭]

如何将WordPress集成到Webpack中?

我应该如何将 javascript 函数调用到 kohana 视图中?

如何将 amazon polly 集成到我的 wordpress 博客中?