将WordPress集成到PHP网站中

时间:2013-11-25 14:10:34

标签: php wordpress integrate

如果我没有以最佳方式描述情景,我会事先道歉,但我会尽力而为。

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

1 个答案:

答案 0 :(得分:1)

使用以下设置进行假设:

  • /中的MVC控制器捕获 /blog
  • 以外的所有内容
  • WP服务/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输出的事实之外, 的东西或多或少都可以开箱即用。 p>

一些伪代码可以让你到达你想要的地方......(选择你的毒药)......

第一种方法是远程获取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 URI获取str_replace()。 (你也可以使用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启动时,并且插件将全部缓存在关闭钩子上。 / p>

  7. 如果您需要让WP提供任意页面,请将WP_HOME指向网站的根文件夹,而应该工作...

  8. 我将在两个链接中得出进一步的灵感,因为我在劝阻你做的工作很差: