如果我没有以最好的方式描述场景,我提前道歉,但我会尽力而为。
我有一个电子商务网站。我们希望将博客集成到现有的PHP(MVC(框架中。
我正在使用
define('WP_USE_THEMES', FALSE);
require('/wpengine/wp-blog-header.php');
我在一个名为"wpengine"的子叶下安装了 WordPress,但想调用 WP 函数从自定义控制器渲染主题,因此我可以根据需要将渲染的内容放入页面中。
是否有一个WordPress函数,我可以将GET参数传递给它来渲染内容,就像wordpress通常会做的那样?
也许这将有助于描述我想做什么
->Page Request
---> Loads custom framework
---> Builds custom view
---> Gets content from WP via function call ( rendered category, post, or page )
---> Injects content from WP into view
-> Returns page
对假设使用以下设置:
/
中的 MVC 控制器,可捕获除/blog
之外的所有内容- 可湿性粉剂服务
/blog
/wp
中的WP文件
/wp-config.php 文件中,添加:
define('WP_HOME', 'http://example.com/blog'); # important! no trailing slash
define('WP_SITEURL', 'http://example.com/wp'); # important! no trailing slash
这两个常量在使WP在其文件夹之外工作时会发生很多魔术。只要您有一个自定义构建的主题,上述方法或多或少可以开箱即用,除了您想要将 WP 输出包装在视图中的事实。
一些伪代码可以让你到达你想要的地方......(选择你的毒药(...
第一种方法是远程获取WP:
function http_fetch_the_wp_mess() {
$request = remote_fetch('http://path/to/wp/wherever');
extract_and_process_headers($request);
return extract_and_process_content($request);
}
第一种方法的好处是它相当干净且没有风险。您可以使用 http 获取/wp/wherever
,并根据需要在返回给您的内容中str_replace()
URI。(你也可以使用 ajax 甚至 iframe 来做到这一点。WP可以使用没有页眉,页脚或侧边栏的主题生活在自己的贫民窟中,您应该很高兴。
另一种方法是包含WP,这要棘手得多(一如既往,魔鬼在细节中(:
function php_include_the_wp_mess() {
# Optionally:
# make_deep_copy_of_superglobals();
ob_start();
require '/path/to/wp/index.php';
# The meat of our procedure:
pray_that_nothing_gets_screwed_up_due_to_using_so_much_global_state();
# Optionally:
# cleanup_superglobals();
# cleanup_and_fix_headers();
return ob_end_clear_up_to_where_started_further_up();
}
以上几点:
$_GET
、$_POST
、$_COOKIE
和$_REQUEST
都被砍了,还有——等等$_SERVER
!他们偶尔也会改变。因此,如果您在请求处理中进一步依赖它们,请留意。在将任何信息处理到WP之前,请备份您可能关心的任何信息。由于您的MVC想要未斜线的数据,而不是WP的斜线数据,并且由于除了WP注册的操作之外,您还可能注册关闭操作,如果涉及任何数据库查询,您的里程可能会有所不同。如果您决定将超级全局变量备份和还原到WP被触发之前的状态,请非常警惕安全考虑,因为WP和插件实际上可以并且确实在该关闭钩子上发出查询。
不用说,您仍然需要一个自定义主题。一个没有页眉、页脚或侧边栏的。亚达,亚达。
万一重要,一些插件在无法访问自己喜欢的全局变量时会中断;事实上,许多插件确实如此。一些插件还会启动输出缓冲区;没有那么多,但在终止输出缓冲区时仍然需要警惕这一点。
WP和相当少量的插件(大多数,但不仅限于缓存和反垃圾邮件相关(可能会更改某些标头,并且偶尔会错误地这样做或没有达到应有的最佳状态。因此,如果他们采用的选项与您自己的缓存选项冲突,请留意这一点。尤其是在饼干方面。
说到缓存,你必然需要自己滚动:当WP启动时,输出已经开始——即使它在缓冲区中——插件将全部缓存在关闭钩子上。
如果您需要使WP提供任意页面,请改为
WP_HOME
指向站点的根文件夹,它应该可以工作...
最后,我将用两个链接来进一步启发我,以防我在阻止你尝试方面做得不好:
- https://github.com/kayue/WordpressBundle
- https://github.com/fullsixspain/FullSIXWordPressBundle