如何将Wordpress集成到Kohana中3

ale*_*lex 9 php wordpress integration kohana kohana-3

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

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

这是我想到的选项

  • 将模板设置为与Kohana站点完全相同(耗时,非DRY,可能无效)
  • 将博客包括在内iframe(丑陋如同地狱)
  • curL Wordpress页面.这当然意味着我需要在评论发布等之间创建层,这听起来像是太多的工作.

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

我发现这篇文章详细介绍了Kohana for Wordpress插件,但我仍然对它是如何工作感到困惑.

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

Zah*_*aka 8

哦,我很久以前就做过这件事(实际上是去年年底).

假设

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

重命名

首先,您需要__()在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管理员中显示错误消息.您还需要更改error_reporting,因为Wordpress失败E_STRICT.

您很可能需要删除处理请求的引导程序的最后几行(在Kohana中),并更改您的init:

Kohana::init(array(
    'base_url'   => get_bloginfo('home') . '/',
    'index_file'   => '',
));
Run Code Online (Sandbox Code Playgroud)

在Wordpress functions.php文件或引导程序中,添加以下行:

remove_filter('template_redirect', 'redirect_canonical');
add_filter('template_redirect', 'Application::redirect_canonical');
Run Code Online (Sandbox Code Playgroud)

其中,应用程序是一个类你选择的.

我的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;
}
Run Code Online (Sandbox Code Playgroud)

它可以让WordPress的做这对于那些可能已移动如任何页面重定向/约/日历/日历,只要你没有一个关于控制器和日历定义的动作.

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

额外

这不是必需的,但您可以将主题的header.php放在kohana视图文件夹(应用程序或模块)和任何主题文件下

echo View::factory('header')
Run Code Online (Sandbox Code Playgroud)

您可以使用页脚(或任何其他文件)执行相同的操作.在header.php中,您也可以这样做:

if (isset($title)) echo $title; else wp_title(YOUR_OPTIONS);
Run Code Online (Sandbox Code Playgroud)

这样你就可以在你的控制器中

echo View::factory('header')->set('title', 'YOUR_TITLE');
Run Code Online (Sandbox Code Playgroud)

为了保持网址的一致性,你可能不得不从Wordpress永久链接的末尾开始,因此/%year%/%monthnum%/%day%/%postname%/变为/%year%/%monthnum%/%day% /%postname%


如果您需要更多帮助整合Wordpress和Kohana,请告诉我.


Gal*_*len 4

我实际上已经使用 wordpress 作为 code igniter 站点的 CMS。这是我用来提取页面内容而不是博客内容的方法,但也许您可以对其进行一些更改以满足您的需求。

\n\n

在我的前端控制器中,我添加了 wordpress 头文件

\n\n
require(\'/path/to/wp-blog-header.php\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

这使您可以访问您需要的 2 个功能

\n\n
get_page()  \xe2\x80\x93 Get the page data from the database\nwpautop() \xe2\x80\x93 Automatically add paragraph tags to page content\n
Run Code Online (Sandbox Code Playgroud)\n\n

获取页面数据

\n\n
$page_data = get_page( 4 ); // Where 4 is the page ID in wordpress\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您收到此错误:

\n\n
\n

致命错误: 只有变量可以通过引用传递\xe2\x80\xa6

\n
\n\n

你必须这样做

\n\n
$page_id = 4;\n$page_data = get_page( $page_id );\n
Run Code Online (Sandbox Code Playgroud)\n\n

因为一个错误某些版本的 php 存在

\n\n

然后在视图中

\n\n
<?= wpautop($page_data->post_content) ?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

希望这有帮助\n


\n编辑

\n\n


\n\n

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

\n