我现在需要让Kohana 3网站有一个Wordpress博客。
我见过Kerkness'Kohana For Wordpress,但它似乎与我想要的相反。
以下是我想到的选项
iframe
(丑陋的地狱)有没有办法在现有的Kohana应用程序中包含Wordpress博客?你有什么建议吗?
我找到了this post detailing the Kohana for Wordpress plugin,但我仍然对它是如何工作感到困惑。
这是否意味着从Wordpress中,我可以称为Kohana控制器?在我的情况下这对我有用吗?
答案 0 :(得分:8)
哦,我很久以前就做过这件事(实际上是去年年底)。
首先,您需要重命名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管理员中显示错误消息。您还需要更改error_reporting,因为Wordpress失败E_STRICT。
您很可能需要删除处理请求的引导程序的最后几行(在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');
其中应用是您选择的课程。
我的应用程序类的代码(没有类定义)是:
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 控制器和日历操作
所以你有它。任何未在Wordpress中定义的网址都将落入您定义的控制器(或使用主题的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');
为了保持网址的一致性,您可能需要从Wordpress永久链接的末尾开始,因此 /%year%/%monthnum%/%day%/%postname%/ 变为 /%year%/%monthnum%/%day%/%postname%等
如果您需要更多帮助整合Wordpress和Kohana,请告诉我。
答案 1 :(得分:4)
我实际上已经将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) ?>
希望这会有所帮助
<小时/> EDIT
我在文件系统中的/ blog安装了wordpress。所以wordpress实际上通常作为博客运行。我只是使用这种方法来抓取页面
答案 2 :(得分:3)
由于WordPress的工作方式,这将非常困难。具体来说,它在整个地方使用全局变量,并且因为Kohana是作用域的,所以你将无法访问这些变量。
长话短说:你想要的几乎是不可能的。但是,如果你让它工作(没有黑客攻击WP),我真的很想知道你是如何做到的。
答案 3 :(得分:1)
见这里:http://www.intuitivity.org/archives/8 我昨天想通了:)
答案 4 :(得分:1)
另一种解决方案是将Wordpress和Kohana安装完全分开。然后你创建一个自定义的Wordpress主题,从Kohana拉出页眉和页脚(你可以为它创建一个Kohana控制器)。
一旦您有页眉和页脚,博客就会集成到您的网站,即使它仍然是一个完全独立的安装。优点是没有任何东西可以破解Wordpress或Kohana使其正常工作。
在此博客文章中有关于此方法的更多详细信息:Integrating Wordpress into a Kohana application
答案 5 :(得分:0)
我一直以为这会比较容易。也就是说,使用WordPress作为您网站的后端(至少对于博客部分)并使用Kohana来提供帖子和页面。如果我没有误会,您需要做的就是设置模型(发布,评论,页面)以从WordPress数据库(带或不带ORM)收集数据而不是新数据。