2013-11-25 117 views
1

如果我不是以最好的方式描述场景,我会提前道歉,但我会尽我所能。将WordPress集成到PHP网站

我有一个电子商务(ISH)网站。我们希望将博客整合到现有的PHP(MVC)框架中。

我使用

define('WP_USE_THEMES', FALSE); 
require('/wpengine/wp-blog-header.php'); 

一个名为“wpengine” subfoler下我已经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 
+0

定义“按照WP通常的方式呈现内容”...(如果这是我的想法,你需要阅读很多东西,或者你需要聘请某人,因为它不是5行解释。) –

+0

对不起,不清楚。我希望WP将模板文件放在一起,并将HTML作为变量直接输出到屏幕。这样我就可以根据需要将“呈现”,或者说,“组装”的内容从wordpress注入到页面中。 – Ben

回答

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输出包装在视图中。

一些伪代码,让你要...(挑选你的毒药)...

第一种方法是远程读取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和相当少量的插件(大部分,但不仅仅是缓存和反垃圾邮件相关)可能会更改某些标头,偶尔也会导致错误或不正确。因此,如果他们选择的选项与您自己的缓存选项冲突,那么请注意这一方面。特别是当涉及到cookies时。说到缓存,你必然需要推出自己的产品:输出已经开始 - 即使它在缓冲区中 - 到WP开始时,插件将全部缓存在关机钩上。

  6. 如果您需要WP服务任意页面,使WP_HOME指向站点的根文件夹,而是和它应该工作...

我会两个环节中更多的灵感总结事件我做的不好,在阻止你去尝试: