【问题标题】:Integrating WordPress into PHP website将 WordPress 集成到 PHP 网站中
【发布时间】:2013-11-25 14:10:34
【问题描述】:

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

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

【问题讨论】:

  • 定义“像 WP 通常会做的那样渲染内容”...(如果这是我的想法,你有很多阅读要做,或者你需要雇人,因为这不是 5 行解释。)
  • 抱歉没有更清楚。我希望 WP 将模板文件放在一起并将 HTML 作为变量直接输出到屏幕上。这样我就可以根据需要将 wordpress 中的“渲染”,或者更确切地说,“组装”的内容注入到页面中。

标签: php wordpress integrate


【解决方案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,并在返回给您的内容中根据需要获取 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 想要非 slashed 数据,而不是 WP 的 slashed 数据,并且由于除了 WP 注册的操作之外,您还可能注册关闭操作,如果它们涉及任何操作,您的里程可能会有所不同数据库查询。如果您决定在 WP 被解雇之前的状态下备份和恢复超全局变量,请非常注意安全问题,因为 WP 和插件实际上可以并且可以 对该关闭挂钩发出查询。

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

  4. 以防万一,一些插件在无法访问自己喜欢的全局变量时会中断;事实上,很多人都这样做。一些插件还启动输出缓冲区;没有那么多,但是当您终止输出缓冲区时,您仍然需要注意这一点。

  5. WP 和少数插件(主要但不仅限于缓存和反垃圾邮件相关)可能会更改某些标头,并且有时会不正确或没有达到应有的最佳效果。因此,如果他们采用的选项与您自己的缓存选项发生冲突,请注意这一点。尤其是在涉及到 cookie 时。

  6. 1234563 /p>
  7. 如果您需要让 WP 服务于任意页面,请将 WP_HOME 改为指向该站点的根文件夹,它应该工作......

如果我在劝阻你尝试方面做得不好,我会用两个链接作为进一步的灵感:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多