将WordPress集成到PHP网站中


Integrating WordPress into PHP website

如果我没有以最好的方式描述场景,我提前道歉,但我会尽力而为。

我有一个电子商务网站。我们希望将博客集成到现有的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

/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();
}

以上几点:

  1. $_GET$_POST$_COOKIE$_REQUEST都被砍了,还有——等等$_SERVER!他们偶尔也会改变。因此,如果您在请求处理中进一步依赖它们,请留意。在将任何信息处理到WP之前,请备份您可能关心的任何信息。

  2. 由于您的MVC想要未斜线的数据,而不是WP的斜线数据,并且由于除了WP注册的操作之外,您还可能注册关闭操作,如果涉及任何数据库查询,您的里程可能会有所不同。如果您决定将超级全局变量备份和还原到WP被触发之前的状态,请非常警惕安全考虑,因为WP和插件实际上可以并且确实在该关闭钩子上发出查询。

  3. 不用说,您仍然需要一个自定义主题。一个没有页眉、页脚或侧边栏的。亚达,亚达。

  4. 万一重要,一些插件在无法访问自己喜欢的全局变量时会中断;事实上,许多插件确实如此。一些插件还会启动输出缓冲区;没有那么多,但在终止输出缓冲区时仍然需要警惕这一点。

  5. WP和相当少量的插件(大多数,但不仅限于缓存和反垃圾邮件相关(可能会更改某些标头,并且偶尔会错误地这样做或没有达到应有的最佳状态。因此,如果他们采用的选项与您自己的缓存选项冲突,请留意这一点。尤其是在饼干方面。

  6. 说到缓存,你必然需要自己滚动:当WP启动时,输出已经开始——即使它在缓冲区中——插件将全部缓存在关闭钩子上。

  7. 如果您需要使WP提供任意页面,请改为WP_HOME指向站点的根文件夹,它应该可以工作...

最后,我将用两个链接来进一步启发我,以防我在阻止你尝试方面做得不好:

  • https://github.com/kayue/WordpressBundle
  • https://github.com/fullsixspain/FullSIXWordPressBundle