ale*_*lex 9 php wordpress integration kohana kohana-3
我现在需要让Kohana 3网站拥有一个Wordpress博客.
我见过Kerkness'Kohana For Wordpress,但它似乎与我想要的相反.
这是我想到的选项
iframe(丑陋如同地狱)有没有办法在现有的Kohana应用程序中包含Wordpress博客?你有什么建议吗?
我发现这篇文章详细介绍了Kohana for Wordpress插件,但我仍然对它是如何工作感到困惑.
这是否意味着从Wordpress中,我可以称为Kohana控制器?在我的情况下这对我有用吗?
哦,我很久以前就做过这件事(实际上是去年年底).
首先,您需要__()在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' => '',
));
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,请告诉我.
我实际上已经使用 wordpress 作为 code igniter 站点的 CMS。这是我用来提取页面内容而不是博客内容的方法,但也许您可以对其进行一些更改以满足您的需求。
\n\n在我的前端控制器中,我添加了 wordpress 头文件
\n\nrequire(\'/path/to/wp-blog-header.php\');\nRun Code Online (Sandbox Code Playgroud)\n\n这使您可以访问您需要的 2 个功能
\n\nget_page() \xe2\x80\x93 Get the page data from the database\nwpautop() \xe2\x80\x93 Automatically add paragraph tags to page content\nRun Code Online (Sandbox Code Playgroud)\n\n获取页面数据
\n\n$page_data = get_page( 4 ); // Where 4 is the page ID in wordpress\nRun Code Online (Sandbox Code Playgroud)\n\n如果您收到此错误:
\n\n\n\n\n致命错误: 只有变量可以通过引用传递\xe2\x80\xa6
\n
你必须这样做
\n\n$page_id = 4;\n$page_data = get_page( $page_id );\nRun Code Online (Sandbox Code Playgroud)\n\n因为一个错误某些版本的 php 存在
\n\n然后在视图中
\n\n<?= wpautop($page_data->post_content) ?>\nRun Code Online (Sandbox Code Playgroud)\n\n希望这有帮助\n
我在文件系统中的 /blog 安装了 wordpress。所以wordpress实际上是作为一个博客正常运行的。我只是用这个方法来抓取页面
\n