对不起,我回答了一个老问题,但是互联网上的任何地方都没有回答。这是一个重要的问题,因为 Wordpress 对最终用户有好处,而 Fuel PHP 速度非常快,对程序员也有好处。
您可以通过两种方式集成 Wordpress 和 Fuel PHP。
- Wordpress 在 Fuel PHP 中运行
- 让 PHP 在 Wordpress 中运行
第一种方式
我敢打赌,您要求的是第二个,但是您发布了第一个教程的链接。我只能给你第二个答案。
通常,第一种方法可能会很痛苦,但是这里有一些提示可以帮助您入门。
Wordpress Codex - Integrating Wordpress with Your Website
通过这种方式,您可以使用 Wordpress 主题覆盖并输出任何内容,并让 Fuel Request 使用 Wordpress 查询功能带头。如果您想要 Wordpress 面板和 Fuel PHP 显示,这似乎是一种很好的集成方式,我认为这根本不是一个好主意,但如果您愿意,那就去吧。
第二种方式
我想实现基于 Fuel PHP 和 Wordpress 网站的后台面板,其数据取自该后台面板并在 Wordpress 代码中使用 Fuel PHP 类。
这样,您应该保留 Wordpress 应用程序路由,并利用 Fuel PHP 的 HMVC 模式。
我找到了这个,它给了我如何制作这个的总体思路:
https://github.com/robertosobachi/wp-fuel-framework
第 1 步 - Wordpress 基础知识
不要修改 Wordpress 核心。不要修改 Wordpress 主题。创建您自己的子主题或您自己的主题。如果你想让一切都变得正确 - 你应该为此创建 Wordpress 插件。
然后您可以将 Fuel PHP 集成到 functions.php 文件中,但是最好的方法是使用侧边栏(小部件)区域创建自己的主题并创建插件,该插件将使用主题定义的侧边栏、定义的 PHP 函数或/和简码。
在您的主题/插件代码中,您需要加载 Fuel PHP。您可以在 Widget Init 操作中执行此操作,但您可以选择在何处准确加载。
以下代码适用于 Fuel PHP 1.8,但您可以按照此步骤使用更多版本。
步骤 #2 - 燃料 index.php 复制
让我们假设以下文件夹结构:
/apache/www/backoffice/(带有燃料和公用文件夹)
/apache/www/wordpress/(使用 wordpress)
打开 /apache/www/backoffice/public/index.php 看看那里发生了什么。首先要做的是在 Wordpress 中复制 Fuel 正在执行的步骤。我粘贴的每个代码都应该放在你的 Wordpress 插件或主题中(如你所愿)。 ABSPATH 由 Wordpress 定义。
$dir = realpath(ABSPATH.'../backoffice/public');
define('DOCROOT', $dir.DIRECTORY_SEPARATOR);
define('APPPATH', realpath($dir.'/../fuel/app/').DIRECTORY_SEPARATOR);
define('PKGPATH', realpath($dir.'/../fuel/packages/').DIRECTORY_SEPARATOR);
define('COREPATH', realpath($dir.'/../fuel/core/').DIRECTORY_SEPARATOR);
现在你可以复制 Fuel index.php 的其余部分了:
defined('FUEL_START_TIME') or define('FUEL_START_TIME', microtime(true));
defined('FUEL_START_MEM') or define('FUEL_START_MEM', memory_get_usage());
// Load in the Fuel autoloader
if ( ! file_exists(COREPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php'))
{
die('No composer autoloader found. Please run composer to install the FuelPHP framework dependencies first!');
}
// Activate the framework class autoloader
require COREPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php';
class_alias('Fuel\\Core\\Autoloader', 'Autoloader');
index.php 的其余代码基于 Request 类,我们现在不想使用,所以不要复制它。但是你可以看到这条线:
require APPPATH.'bootstrap.php';
让我们转到那个文件。在第一行里面你可以找到:
require COREPATH.'bootstrap.php';
所以让我们先从这个开始。
步骤 #3 - CORE bootstrap.php 复制
已保存,可能需要复制此文件的第一行。
define('DS', DIRECTORY_SEPARATOR);
define('CRLF', chr(13).chr(10));
define('MBSTRING', function_exists('mb_get_info'));
require COREPATH.'base.php';
setup_autoloader();
get_composer();
请勿复制 register_shutdown_function、set_exception_handler、set_error_handler,除非您知道自己在做什么。您可能想使用默认的 Wordpress 错误处理。使用燃料错误处理非常棘手,但如果你愿意 - 试试吧。我个人放弃了。
您必须复制 setup_autoloader 和 get_composer 函数。它们很长,但它们对于使这种集成起作用至关重要。我没有在这里复制它以使这篇文章更具可读性。
步骤#4 - APP bootstrap.php 复制
希望你还没有迷路。我们必须回到APP bootstrap.php 并复制这行。
\Autoloader::add_classes(array(
// Add classes you want to override here
// Example: 'View' => APPPATH.'classes/view.php',
));
\Autoloader::register();
\Fuel::$env = \Arr::get($_SERVER, 'FUEL_ENV', \Arr::get($_ENV, 'FUEL_ENV', \Fuel::DEVELOPMENT));
\Fuel::init('config.php');
我不确定 Fuel::init 是否对加载如此重要,还没有测试过。但是您必须知道 Fuel::init 方法正在设置一些全局变量,例如 date_default_timezone_set(根据配置),因此它可以以某种方式修改 Wordpress 的工作方式。
所以,就是这样。现在在您的插件/主题文件中,您可以向控制器发出 HMVC 请求。你可以访问你的模型、燃料类——就像你以前做的那样。不要忘记在 Wordpress 中激活您的插件。
$widget = Request::forge('widget/sample')->execute();
您必须注意它不会自动回显视图 - 请参阅 Fuel 文档了解更多信息。
这里是粘贴箱:link
编辑:
我发现使用会话的另一个棘手部分是:当您仅使用 HMVC 请求时,会话不会保存,因此您必须在代码中手动调用 Session::write()(无论您想保存它的位置)。您必须在 Wordpress 输出之前调用它,因此请尝试连接到 init 或将其放在您的主插件文件中。
编辑 #2:
Wordpress 自动“magic_quotes_gpc”功能还有另一个棘手的部分。 不要简单地通过 $_POST = stripslashes_deep($_POST); 将其关闭,因为它可能会破坏 Wordpress 的安全性。更好的方法是在添加到 Fuel 代码中的数据库之前删除斜线,并且只删除需要删除的变量。