如何将Wordpress整合到Kohana 3中

问题描述:

我现在需要做一个Kohana 3网站有一个WordPress的博客。如何将Wordpress整合到Kohana 3中

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

下面是我想到的

  • 样式选项模板看起来就像Kohana的网站(费时,不干燥,可能无法正常工作)
  • 包括iframe内的博客(丑作为所有地狱)
  • cURL Wordpress页面。这当然意味着我需要在评论发布等之间创建图层,这听起来像太多的工作。

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

我发现this post detailing the Kohana for Wordpress plugin,但我仍然困惑它如何工作。

这是否意味着从WordPress内,我可以打电话给Kohana控制器?这在我的情况下对我有用吗?

+0

嗨亚历克斯,你能不能请检查这太问题http://stackoverflow.com/questions/20934551/access-data-from-kohana- to-wordpress与wordpress中访问kohana应用程序数据有关。感谢 – user2681579 2014-01-06 06:56:49

我已经使用wordpress代码点火网站的CMS。这是我用来提取页面内容的方法,而不是博客内容,但也许你可以稍微改变它以适应你的需求。

在我的前端控制器我增加了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: Only variables can be passed by reference…

你必须做这样

$page_id = 4; 
$page_data = get_page($page_id); 
因为在PHP

视图

随后的某些版本bug

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

希望这有助于


编辑


我在文件系统的/ blog中安装了wordpress。所以wordpress通常作为博客运行。我只是使用这种方法来抓取页面

+0

感谢Galen,但是我已经解决了它的这一部分(页面)。我想知道我是否也可以为博客内容做类似的事情。 – alex 2010-05-13 22:16:52

+0

更新了我的回答 – Galen 2010-05-13 23:23:16

+0

非常感谢,那么当您想要查看博客时,您是否将用户指向/博客?一旦显示博客,它是否会在任何时候使用CI?我想维护我的Kohana应用程序的相同标题和功能,所以我宁愿不指向Wordpress安装,而是让Wordpress的内容出现在我的一个视图中。 – alex 2010-05-13 23:37:31

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

长话短说:你想要的东西几乎是不可能的。但是,如果你使用它(没有黑客WP),我真的很感兴趣,看看你是如何做到的。

+0

谢谢,我认为这可能很困难。上次我尝试了它(用我的个人博客),我写了Kohana 2.3的整个前端。如果我确实得到它的工作,我会让你知道。 – alex 2010-05-14 09:25:54

+0

你可以请检查这个SO问题http://stackoverflow.com/questions/20934551/access-data-from-kohana-to-wordpress并指导我。 – user2681579 2014-01-05 14:17:02

我一直认为这会比较容易。也就是说,要使用WordPress作为您网站的后端(至少在博客部分),并使用Kohana来提供帖子和页面。如果我没有弄错,所有你需要做的就是设置你的模型(帖子,评论,页面),从WordPress数据库收集他们的数据(带或不带ORM),而不是一个新的。

+0

这是实现它的简单方法(我为自己的博客所做的)。但是你需要为任何功能创建包装(例如发布评论)。 – alex 2010-05-25 23:26:45

在这里看到:http://www.intuitivity.org/archives/8 昨日:)

+0

感谢您的链接。 +1 – alex 2010-06-28 23:33:25

哦,我想通了,我这样做是很久以前(其实是对去年年底)。

假设

  1. 您使用的是有mod_rewrite的或类似的选项WordPress的永久链接。
  2. 您没有启用register_globals()。关闭Word以确保Wordpress的全局变量不会被Kohana删除。

重命名

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

层次

你需要做的下一个决定是是否要加载的WordPress内的Kohana Kohana的还是里面的WordPress。我更喜欢后者,我将在下面进行介绍。如果你愿意走这条路线,我可以记录后者。

我把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'); 

其中应用是一类你选择的。

我对应用类(无类定义)的代码是:

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的做到这对于那些可能已经例如移动的任何页面重定向/约/日历/日历只要你没有一个控制器和定义日历行动。

所以你有它。任何未在Wordpress中定义的URL都会落入您定义的控制器(或使用您的主题的404模板)。

附加

这不是必需的,但你可以把你的主题的header.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'); 

为了保持一致的网址,你可能需要从年底起飞/ WordPress的永久链接所以/%,比去年%/%monthnum%/天%%/%postname%/成为/%,比去年%/%monthnum%/天%%/%postname%


请让我知道如果你需要任何更多的帮助整合Wordpress和Kohana。

+0

+1这太好了!非常感谢。我最终为项目跳过Kohana并单独使用WordPress,并且我学到了很多WordPress的工作方式(以及一些可疑的编码......)。如果我决定将来一起使用这些项目,我一定会考虑这一点。 – alex 2010-08-29 01:37:06

+0

谢谢。祝你的项目好运。 – Zahymaka 2010-08-29 01:53:02

+0

我在我的kohana应用程序中使用wordpress论坛。我将kohana应用程序数据库和wordpress数据库保存在单独的实例中。我想在wordpress数据库中创建一个数据库条目,同时在kohana应用程序中添加一个新用户。可以使用以下答案如果可能,你可以提出一些想法。 – user2681579 2014-01-05 13:54:19

另一种解决方案是保持Wordpress和Kohana的安装完全分离。然后你创建一个自定义的Wordpress主题,它将从Kohana中拉出页眉和页脚(你可以为它创建一个Kohana控制器)。

将页眉和页脚插入后,即使它仍然是一个完全独立的安装,该博客也会与您的网站集成。好处是,没有什么可以破解Wordpress或Kohana来让它工作。

有关于这个方法在这个博客帖子的更多细节:Integrating Wordpress into a Kohana application

+0

正是我在找的东西。多谢,伙计! – 2016-07-16 20:41:51